Как вернуть идентификатор из вставки в базу данных sqflite во флаттере

У меня есть 2 базы данных. Один для папок и один для заметок. База данных папок содержит заголовок и строку json списка идентификаторов. Идентификаторы должны представлять вторую базу данных заметок. В основном папки должны содержать список заметок, и это лучший способ, который я нашел до сих пор. Моя проблема в том, что когда я создаю новую заметку и вставляю ее в базу данных, я не знаю, как вернуть идентификатор новой заметки.

Если я установлю идентификатор при создании заметки, все заметки будут иметь одинаковый идентификатор. Если я не установлю идентификатор, вызов note.id вернет значение null. На основе моей функции создания идентификатор заметки должен установить себя (id INTEGER PRIMARY KEY AUTOINCREMENT)

Моя идея заключается в том, что при создании новой заметки я бы как-то вернул инт 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);
    });
  }
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
2
0
6 979
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны иметь возможность получить идентификатор из rawInsert следующим образом:

final noteId = await transaction.rawInsert(query);

по документам: https://pub.dev/packages/sqflite#raw-sql-запросы

Вместо того, чтобы хранить строковый список идентификаторов в таблице папок, вы также можете попробовать сохранить folder_id в таблице заметок в качестве внешнего ключа: https://sqlite.org/foreignkeys.html

Ответ принят как подходящий

Вставленный идентификатор также возвращается вспомогательным методом 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');

Другие вопросы по теме