Android SQLite Exception没有这样的列

时间:2012-03-18 14:06:21

标签: android eclipse sqlite

我的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 个答案:

答案 0 :(得分:4)

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, "在文本之前放置了一个空格(此处和其他列)。

不要忘记在此之后删除数据库(从手机上卸载应用程序)!

答案 1 :(得分:2)

您的代码中的一个错误是在字符串QUESTIONS_TABLE_CREATE中找到 您的代码使用 + KEY_B +“text”“,这将导致 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); ";