1

我有 2 个数据库。一个用于文件夹,一个用于笔记。文件夹数据库包含id列表的标题和json字符串。i​​d应该代表第二个笔记数据库。基本上文件夹需要包含一个笔记列表,这是我迄今为止发现的最好的方式。我的问题是,当我创建一个新便笺并将其插入数据库时​​,我不确定如何取回新便笺的 id。

如果我在创建笔记时设置了 id,那么所有笔记都将具有相同的 id。如果我没有设置 id,那么调用 note.id 会返回 null。根据我的创建函数,注释的 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);
    });
  }
4

2 回答 2

3

插入的 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');
于 2019-11-28T07:29:57.153 回答
1

您应该能够像这样从 rawInsert 获取 id:

final noteId = await transaction.rawInsert(query);

根据文档:https ://pub.dev/packages/sqflite#raw-sql-queries

除了在文件夹表上存储 id 的字符串列表,您还可以尝试在 notes 表上存储 folder_id 作为外键: https ://sqlite.org/foreignkeys.html

于 2019-11-17T15:18:41.433 回答