我有2个数据库。一个用于文件夹,一个用于笔记。文件夹数据库包含ID列表的标题和JSON字符串ID应该代表第二个注释的第二个数据库。基本上,文件夹需要包含笔记列表,这是我到目前为止发现的最佳方法。我的问题是,当我创建一个新笔记并将其插入数据库时,我不确定如何将新注释的ID恢复。
如果我在创建注释时设置ID,则所有注释都具有相同的ID。如果我不设置ID,则调用Note.ID返回null。根据我的创建功能,Note的ID应该设置自己(ID Integer主键自动启动(
我的想法是,在创建新音符时,我会以某种方式返回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 db = await getDb();
final 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的字符串列表,您还可以尝试在笔记表上存储文件夹作为外键:https://sqlite.org/foreignkeys.html