如何将ID从插入中返回到颤动中的SQFlite数据库中



我有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

最新更新