我在SQLite
数据库中有一列。它存储文本值。插入新值时,我需要删除以前的值并在数据库中添加新值。这是Class中的方法,扩展了SQLiteOpenHelper
以更新列。
public void updateOffline(String data){
SQLiteDatabase db=this.getWritableDatabase();
String updateQuery="UPDATE "+OFFLINE_MODE +" SET "+OFFLINE_DATA+" = "+ data;
db.execSQL(readQuery);
}
其中数据是我需要UPDATE
使用的字符串
我在Fragment之一中将此方法称为
db.updateOffline(tempArray.toString());
我收到错误消息
android.database.sqlite.SQLiteException: no such column: {"name":"jjajaja","phone":"4545454545","no_people":"2","booktime":"12:46 pm"} (code 1): , while compiling: UPDATE offlinedata SET offlinequeue =[{"name":"jjajaja","phone":"4545454545","no_people":"2","booktime":"12:46 pm"}]
如何解决这个问题?
答案 0 :(得分:1)
您不能只在SQL内部转储JSON字符串并期望它在语法上有效。
SQL中的字符串文字使用“单引号”,但是仅转储SQL引号中的数据会使您遭受SQL注入。请改用变量。
如果将SQLiteDatabse
的{{1}} update()
方法与ContentValues
一起使用,它将自动为您使用变量。
如果您想继续使用原始SQL,请进行更改
String updateQuery="UPDATE "+OFFLINE_MODE +" SET "+OFFLINE_DATA+" = "+ data;
db.execSQL(updateQuery);
类似
String updateQuery="UPDATE "+OFFLINE_MODE +" SET "+OFFLINE_DATA+" = ?";
db.execSQL(updateQuery, new Object[] { data });