错误android.database.sqlite.SQLiteException:无此类列:更新SQLite数据库时

时间:2018-11-01 07:43:15

标签: android database sqlite sql-update android-sqlite

我在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"}]  

如何解决这个问题?

1 个答案:

答案 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 });