繁体   English   中英

如何在flutter中从插入到sqflite数据库中返回id

[英]How to return id from insert into sqflite database in flutter

我有2个数据库。 一份用于文件夹,一份用于笔记。 文件夹数据库包含一个标题和一个 id 列表的 json 字符串。i​​d 应该代表第二个笔记数据库。 基本上文件夹需要包含一个笔记列表,这是我迄今为止找到的最好的方法。 我的问题是,当我创建一个新笔记并将其插入数据库时​​,我不确定如何取回新笔记的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM