如何 return id 从 flutter 中插入到 sqflite 数据库中
How to return id from insert into sqflite database in flutter
我有 2 个数据库。一个用于文件夹,一个用于笔记。
文件夹数据库包含标题和 ID 列表的 json 字符串
id 应该代表第二个笔记数据库。
基本上文件夹需要包含一个笔记列表,这是迄今为止我发现的最好的方法。我的问题是,当我创建一个新笔记并将其插入数据库时,我不确定如何取回新笔记的 ID。
如果我在创建笔记时设置了 id,那么所有笔记都会有相同的 id。
如果我不设置 id 然后调用 note.id returns null。
根据我的创建函数,Note 的 id 应该自行设置 (id INTEGER PRIMARY KEY AUTOINCREMENT)
我的想法是,在创建新的 Note 时,我会以某种方式 return 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);
});
}
您应该能够像这样从 rawInsert 中获取 ID:
final noteId = await transaction.rawInsert(query);
根据文档:https://pub.dev/packages/sqflite#raw-sql-queries
除了在文件夹 table 上存储 ID 的字符串列表之外,您还可以尝试在笔记 table 上存储 folder_id 作为外键:
https://sqlite.org/foreignkeys.html
插入的id也从db.insert()
辅助方法返回,作为签名
Future<int> insert(String table, Map<String, dynamic> values,
{String nullColumnHack, ConflictAlgorithm conflictAlgorithm})
描述。示例:
final db = await getDb();
final insertedId = await db.insert(
todosTableName,
todo.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
print('insertedId: $insertedId');
我有 2 个数据库。一个用于文件夹,一个用于笔记。 文件夹数据库包含标题和 ID 列表的 json 字符串 id 应该代表第二个笔记数据库。 基本上文件夹需要包含一个笔记列表,这是迄今为止我发现的最好的方法。我的问题是,当我创建一个新笔记并将其插入数据库时,我不确定如何取回新笔记的 ID。
如果我在创建笔记时设置了 id,那么所有笔记都会有相同的 id。 如果我不设置 id 然后调用 note.id returns null。 根据我的创建函数,Note 的 id 应该自行设置 (id INTEGER PRIMARY KEY AUTOINCREMENT)
我的想法是,在创建新的 Note 时,我会以某种方式 return 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);
});
}
您应该能够像这样从 rawInsert 中获取 ID:
final noteId = await transaction.rawInsert(query);
根据文档:https://pub.dev/packages/sqflite#raw-sql-queries
除了在文件夹 table 上存储 ID 的字符串列表之外,您还可以尝试在笔记 table 上存储 folder_id 作为外键: https://sqlite.org/foreignkeys.html
插入的id也从db.insert()
辅助方法返回,作为签名
Future<int> insert(String table, Map<String, dynamic> values,
{String nullColumnHack, ConflictAlgorithm conflictAlgorithm})
描述。示例:
final db = await getDb();
final insertedId = await db.insert(
todosTableName,
todo.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
print('insertedId: $insertedId');