如何在Flutter中从插入到sqflite数据库中返回ID

时间:2019-07-07 00:54:05

标签: database flutter crud sqflite

我有2个数据库。一个用于文件夹,另一个用于笔记。 文件夹数据库包含ID列表的标题和json字符串 ID应该代表第二个注释数据库。 基本上,文件夹需要包含一个注释列表,这是到目前为止我发现的最好方法。我的问题是,当我创建新便笺并将其插入数据库时​​,我不确定如何获取新便笺的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);
    });
  }

2 个答案:

答案 0 :(得分:1)

您应该可以像这样从rawInsert获取ID:

$model->addRule(
    'category',
    function ($attribute, $params, $validator) use ($model) {
        if (empty($model->$attribute)) {
            $model->addError($attribute, 'Error message');
        }
    }
);

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

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

答案 1 :(得分:0)

插入的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('inserted1: $insertedId');