我不确定为什么我会收到此错误:
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中的错误吗?感谢。
答案 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)
删除;来自您的查询字符串。