android .database.sqlite.SQLiteException: Рядом с "SET" - PullRequest
0 голосов
/ 24 февраля 2020

У меня проблемы с синтаксисом SQLite. Может кто-нибудь помочь мне, пожалуйста? Спасибо!:)

Код:

public void updateHours(String newDate, String newStart, String Ends, String newNotes,String id){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET " + COL_1 + " = '" + newDate + "' WHERE " + COL_0 + " = '" + id + "'" + " AND SET "+ COL_2 + " = '" + newStart + "' WHERE " + COL_3 + " = '" + Ends + "'" + " AND " + " SET "+ COL_4 + " = '" + newNotes + "'" ;
    db.execSQL(query);
}

Log Cat:

    android.database.sqlite.SQLiteException: near "SET": syntax error (code 1 SQLITE_ERROR[1]): , while compiling: UPDATE ALLWORKHOURS SET DATE = 'Friday, August 12, 29' WHERE ID = '31' AND SET TIMESHIFTSTART = 'cdd' WHERE TIMESHIFTENDS = 'dddd' AND  SET NOTES = '??????????'

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Оператор AND является логическим оператором , и вы должны , а не использовать его так:

SET column1 = value1 AND column2 = value2 AND ....

Также используйте только 1 WHERE предложение в конце заявления.

Правильный синтаксис для оператора UPDATE:

UPDATE tablename
SET column1 = value1, column2 = value2, ................
WHERE condition1 AND/OR condition2..........
0 голосов
/ 24 февраля 2020

Проблема с вашим запросом, вы не можете иметь несколько наборов в одном запросе. Я думаю, что это то, что вы хотите сделать.

UPDATE ALLWORKHOURS SET DATE = 'Friday, August 12, 29' AND TIMESHIFTSTART = 'cdd' AND 
NOTES = '??????????  WHERE ID = '31'AND TIMESHIFTENDS = 'dddd' 
0 голосов
/ 24 февраля 2020

Существует проблема с синтаксисом вашей команды.

String query = "UPDATE " + TABLE_NAME + " SET " + COL_1 + " = '" + newDate + "' WHERE " + COL_0 + " = '" + id + "'" + " AND SET "+ COL_2 + " = '" + newStart + "' WHERE " + COL_3 + " = '" + Ends + "'" + " AND " + " SET "+ COL_4 + " = '" + newNotes + "'" ;

У вас не может быть SET column = 'asd' WHERE something AND SET column2 = 'asd'

Вы должны изменить это значение на

SET column = 'asd' AND column2 = 'asd' WHERE something

Если эти несколько предложений WHERE отличаются, вы должны разделить эту команду на множество команд

Кроме того, для лучшей читаемости ваших запросов и команд я предлагаю использовать интерполяция

...