Ошибка SQLite Insert In при запуске

Я создал базу данных и создал в ней несколько таблиц. Но в какой-то момент я делаю неправильно, поэтому приложение вылетает при запуске. Вот часть моего кода:

private SQLiteStatement insertUserInfos;
private static final String TN_INFO = "UserInfos";

private static final String CREATE_TABLE_INFO = "CREATE TABLE "
        + TN_INFO
        + " ( \"name\" TEXT, \"surname\" TEXT, \"mail\" TEXT, \"password\" TEXT, \"birthyear\" TEXT, \"currentcity\" TEXT, \"futurecity\" TEXT, \"check\" TEXT ) ";

private static final String INSERT_INFOS = "INSERT INTO "
        + TN_INFO
        + " ( name, surname, mail, password, birthyear, currentcity, futurecity, check ) Values (?,?,?,?,?,?,?,?) ";

public DBHelper(Context context) {
    this.ctx = context;

    DBOpenHelper db = new DBOpenHelper(ctx);
    database = db.getWritableDatabase();

    insertUserInfos = database.compileStatement(INSERT_INFOS);
}

private class DBOpenHelper extends SQLiteOpenHelper {

    public DBOpenHelper(Context context) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_INFO);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}

И я получаю эту ошибку:

06-27 22:42:01.870: E/AndroidRuntime(16550): Вызвано: android.database.sqlite.SQLiteException: рядом с "check": синтаксическая ошибка: при компиляции: INSERT INTO UserInfos (имя, фамилия, почта, пароль , Год рождения, Текущий Город, Будущий Город, Проверить ) Значения (?,?,?,?,?,?,?,?)

Я проверял кучу раз, но я не видел никакой ошибки в этой строке. Любая помощь была бы так хороша.


person yahya    schedule 27.06.2012    source источник
comment
Это может быть (я не уверен), потому что некоторые из ваших имен столбцов являются зарезервированными ключевыми словами в SQLIte (список здесь: sqlite.org/lang_keywords.html). Попробуйте поместить имена столбцов в квадратные скобки [ ] или двойные кавычки в операторе INSERT INTO.   -  person AkiAki007    schedule 27.06.2012
comment
Ад да! =) Большое спасибо. Я просто упустил из виду, что CHECK был ключевым словом =) Просто я изменил слово как checkFlag, так что это больше не ключевое слово, и проблема решена! знак равно   -  person yahya    schedule 28.06.2012
comment
Кстати, вообще используйте кавычки при создании строк SQL. Это не нужно.   -  person RvdK    schedule 28.06.2012


Ответы (1)


check — это зарезервированное слово, его нужно взять в кавычки. Пока вы делаете это в своем операторе создания, вы забыли об этом в своем операторе вставки.

person Stefan    schedule 27.06.2012