Android SQLiteException:执行原始INSERT时没有这样的列

时间:2014-08-26 07:33:16

标签: java android sqlite

我不确定为什么我会收到此错误:

android.database.sqlite.SQLiteException: no such column: ExampleIngrd (code 1): , while compiling: INSERT INTO ingredients(_ingredient_id, _ingredient) VALUES (2, ExampleIngrd );

这是我的数据库创建语句,我已使用新的db版本号正确完成了onUpgrade覆盖:

private static final String DATABASE_CREATE = "create table "
    + TABLE_INGREDIENTS + "(" + COLUMN_ID
    + " integer primary key autoincrement, " + COLUMN_INGREDIENT_ID + " integer not null, " + COLUMN_INGREDIENT
    + " TEXT);"; 

然后执行db.execSQL(DATABASE_CREATE);

这一切都正常执行但是当我尝试使用这个原始查询插入到表中时:

public String createIngredient(String ingredientName, int ingredientID) {
    Cursor cursor = database.rawQuery("INSERT INTO "+MySQLiteHelper.TABLE_INGREDIENTS+"("+MySQLiteHelper.COLUMN_INGREDIENT_ID+", "
        +MySQLiteHelper.COLUMN_INGREDIENT+") VALUES ("
        +ingredientID+", "+ingredientName+");", null);
    cursor.moveToFirst();
    Ingredient newIngredient = cursorToIngredient(cursor);
    cursor.close();
    return newIngredient.getName();
}

我得到错误没有这个列存在于ingredientName中的任何值,我不确定我在这里做错了什么。我错过了SQL中的错误吗?感谢。

2 个答案:

答案 0 :(得分:2)

您需要在'single quotes'中引用SQL中的文字,或者更好,使用参数:

Cursor cursor = database.rawQuery("INSERT INTO "+MySQLiteHelper.TABLE_INGREDIENTS+"("+MySQLiteHelper.COLUMN_INGREDIENT_ID+", "
    +MySQLiteHelper.COLUMN_INGREDIENT+") VALUES (?, ?);",
    new String[] { String.valueOf(ingredientID), ingredientName });

如果没有引号,则将字符串作为标识符,例如列名。

此外,虽然使用这样的rawQuery()技术上有效,但令人困惑。将execSQL()用于不返回值的原始查询。

答案 1 :(得分:-1)

rawQuery()中的SQL查询字符串不应该是;终止。检查以下链接。 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String, java.lang.String[], android.os.CancellationSignal)

删除;来自您的查询字符串。