我正在开发一个离线优先的 flutter 应用程序,该应用程序将其记录在线更新到 MySQL 数据库,以进行桌面 Web 访问和多用户访问。我的 flutter 应用程序为待办事项列表模块创建一个新的待办事项并将其本地保存到 SQLITE。然后,它通过 HTTP POST 将该新记录发送到我的在线服务器,并在其中将该新记录插入到在线 MYSQL 数据库中,并返回该记录最近创建的 ID。然后 Flutter 更新它在 SQLITE 上本地创建的记录以保存“online_todo_id”。
我的问题:如何在 flutter 中编写语法来将新变量设置为本地 SQLITE last_insert_rowid()?
var result = await db.insert(todoTABLE, todo.toDatabaseJson()); //Insert local record SQLITE
//......Http Post REST API to server, returns online_todo_id....
todo.online_todo_id=online_todo_id;// Here I set the new value in the todo object thats going to be updated.
var result2 = await db.rawQuery("SELECT last_insert_rowid() AS id");
var last_insert_rowid= last_insert_rowid(); //****--HELP HERE--****\\
var result2 = await db.update(todoTABLE, todo.toDatabaseJson(),
where: "todo_id = ?", whereArgs: [last_insert_rowid]);
我知道这对你来说可能已经晚了, 但对于遇到这种情况的其他人来说 sqflite 的公共包返回最后一个插入 rowId 作为 db.insert 语句的结果。
所以基本上要获取插入语句的 rowId,您只需要:
var last_insert_rowId = await db.insert(todoTABLE, todo.toDatabaseJson());