Что не так в этом коде? В консоли отладки показана запись sql-кода, но по какой-то причине он не работает

  Future<void> _toggleTodoItem(TodoItem todo) async {
    final int count = await this._db.rawUpdate(
        /*sql=*/ '''
      UPDATE $kDbTableName
      SET content = ${todo.content},
      SET number = ${todo.number}
      WHERE id = ${todo.id};''');
    print('Updated $count records in db.');
  }

Есть ошибка

E/SQLiteLog( 7167): (1) near "SET": syntax error in "UPDATE example1_tbl
E/SQLiteLog( 7167):       SET content = n,
E/SQLiteLog( 7167):       SET number = 1
E/SQLiteLog( 7167):       WHERE id = 7;"
E/flutter ( 7167): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: DatabaseException(near "SET": syntax error (code 1 SQLITE_ERROR): , while compiling: UPDATE example1_tbl
E/flutter ( 7167):       SET content = n,
E/flutter ( 7167):       SET number = 1
E/flutter ( 7167):       WHERE id = 7;) sql '      UPDATE example1_tbl
E/flutter ( 7167):       SET content = n,
E/flutter ( 7167):       SET number = 1
E/flutter ( 7167):       WHERE id = 7;' args []}
0
Nik Evi 9 Дек 2020 в 00:56

1 ответ

Лучший ответ

Синтаксис «UPDATE» на это не похож (https://sqlite.org/lang_update.html ). Ты хочешь:

UPDATE example1_tbl SET content = 'n', number = 1 WHERE id = 7

И вы также должны использовать параметры (https: // github.com/tekartik/sqflite/blob/master/sqflite/doc/sql.md#parameters). Не используйте текст, вставленный в .rawUpdate, если вы не хотите подвергнуться атакам Bobby Tables (https: // bobby-tables. com).

0
Randal Schwartz 8 Дек 2020 в 23:37