Android SQLite Исключение нет такого столбца - PullRequest
1 голос
/ 18 марта 2012

У меня проблема с базой данных в приложении для Android. Вот некоторый код:

private static final String QUESTIONS_TABLE = "questions";
/* questions keys */
public static final String KEY_ROWID = "_id";
public static final String KEY_TYPE = "type";
public static final String KEY_CONTENT = "content";
public static final String KEY_A = "answerA";
public static final String KEY_B = "answerB";
public static final String KEY_C = "answerC";
public static final String KEY_D = "answerD";

private static final String QUESTIONS_TABLE_CREATE = 
    "create table "+ QUESTIONS_TABLE +" (" + KEY_ROWID + " integer primary key autoincrement, "
    + KEY_TYPE + "integer not null,"
    + KEY_CONTENT + " text not null, "
    + KEY_A + " text, "
    + KEY_B + "text, "
    + KEY_C + "text, "
    + KEY_D + "text); ";

//--- QUESTIONS SECTION ---
//--- inserts a close question ---
public long insertCloseQuestion(int type, String content, String[] answers) {
    ContentValues initValues = new ContentValues();
    initValues.put(KEY_TYPE, type);
    initValues.put(KEY_CONTENT, content);
    if(answers != null && answers.length > 0) {
        initValues.put(KEY_A, answers[0]);
        initValues.put(KEY_B, answers[1]);
        initValues.put(KEY_C, answers[2]);
        initValues.put(KEY_D, answers[3]);
    }
    Log.d("VM", initValues.toString());

    return db.insertOrThrow(QUESTIONS_TABLE, null, initValues);
}

Когда я вызываю метод insertCloseQuestion, Android возвращает исключение:

android.database.sqlite.SQLiteException: table questions has no column named answerD: , while compiling: INSERT INTO questions(answerD, content, answerB, answerC, type, answerA) VALUES(?, ?, ?, ?, ?, ?);

У вас есть идеи, как это исправить? Я знаю, что есть несколько подобных тем, но ни одно из решений не помогает мне.

Ответы [ 2 ]

4 голосов
/ 18 марта 2012
private static final String QUESTIONS_TABLE_CREATE = 
    "create table "+ QUESTIONS_TABLE +" (" + KEY_ROWID + " integer primary key autoincrement, "
    + KEY_TYPE + "integer not null,"
    + KEY_CONTENT + " text not null, "
    + KEY_A + " text, "
    + KEY_B + "text, "
    + KEY_C + "text, "
    + KEY_D + "text); ";

Полагаю, между именем столбца и его типом нет пробелов.KEY_B + "text, " ставьте пробел перед текстом (здесь и с другими столбцами).

И не забудьте после этого удалить базу данных (удалить приложение с телефона)!

2 голосов
/ 18 марта 2012

Одна ошибка в вашем коде находится в строке QUESTIONS_TABLE_CREATE Ваш код использует + KEY_B + "текст", , в результате чего итоговая строка будет answerBtext Добавьте пробел в начале текста. Ниже код должен это исправить.

Если в вашем коде нет другой ошибки (части, которые вы здесь показываете, кажутся мне подходящими). Это должно решить вашу проблему:

private static final String QUESTIONS_TABLE_CREATE = 
    "create table "+ QUESTIONS_TABLE +" (" + KEY_ROWID + " integer primary key autoincrement, "
    + KEY_TYPE + " integer not null,"
    + KEY_CONTENT + " text not null, "
    + KEY_A + " text, "
    + KEY_B + " text, "
    + KEY_C + " text, "
    + KEY_D + " text); ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...