Ошибка android.database.sqlite.SQLiteException: такого столбца нет: при обновлении базы данных SQLite - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть один столбец в SQLite базе данных. Он хранит текстовое значение. Когда новое значение вставляется, мне нужно удалить предыдущее значение и добавить новое значение в базе данных. Это метод в классе, который расширяет SQLiteOpenHelper для обновления столбца.

public void updateOffline(String data){
        SQLiteDatabase db=this.getWritableDatabase();
        String updateQuery="UPDATE "+OFFLINE_MODE +" SET "+OFFLINE_DATA+" = "+ data;
        db.execSQL(readQuery);
    }  

где данные - это строка, которая мне нужна UPDATE
Я вызываю этот метод в одном из фрагментов как

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 голосов
/ 01 ноября 2018

Вы не можете просто вывести строку JSON внутри SQL и ожидать, что она будет синтаксически допустимой.

Строковые литералы в SQL заключаются в «одинарные кавычки», но затем просто дамп данных в SQL-кавычках подвергает вас внедрению SQL-кода. Вместо этого используйте переменные.

Если вы используете SQLiteDatabse 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 });
...