[英]How to return id from insert into sqflite database in flutter
我有2个数据库。 一份用于文件夹,一份用于笔记。 文件夹数据库包含一个标题和一个 id 列表的 json 字符串。id 应该代表第二个笔记数据库。 基本上文件夹需要包含一个笔记列表,这是我迄今为止找到的最好的方法。 我的问题是,当我创建一个新笔记并将其插入数据库时,我不确定如何取回新笔记的 id。
如果我在创建笔记时设置了 id,那么所有笔记都将具有相同的 id。 如果我不设置 id,则调用 note.id 将返回 null。 根据我的创建函数,Note 的 id 应该自行设置(id INTEGER PRIMARY KEY AUTOINCREMENT)
我的想法是,在创建新 Note 时,我会以某种方式返回 int id,以便我可以轻松地将其插入到文件夹中。 这是我到目前为止所拥有的。
void addNewNote(Note note) async {
var db_connection = await db;
String query =
'INSERT INTO Note(title, content, date_created, date_last_edited) VALUES(\'${note.title}\', \'${note.content}\', \'${note.date_created}\', \'${note.date_last_edited}\')';
await db_connection.transaction((transaction) async {
return await transaction.rawInsert(query);
});
}
插入的 id 也从db.insert()
辅助方法返回,作为签名
Future<int> insert(String table, Map<String, dynamic> values,
{String nullColumnHack, ConflictAlgorithm conflictAlgorithm})
描述。 例子:
final Database db = await getDb();
int insertedId = await db.insert(
todosTableName,
todo.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
print('insertedId: $insertedId');
您应该能够像这样从 rawInsert 获取 id:
final noteId = await transaction.rawInsert(query);
根据文档: https : //pub.dev/packages/sqflite#raw-sql-queries
除了在文件夹表上存储 id 的字符串列表之外,您还可以尝试将 folder_id 作为外键存储在笔记表上: https : //sqlite.org/foreignkeys.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.