sqlite - sqflite batch.commit() 不适用于颤振
问题描述
我正在尝试在颤振中使用 sqflite 进行批量更新和插入,但提交似乎不起作用。由于没有错误或异常,我不知道发生了什么。以下是我传递列表并基于列表 id 在数据库中进行更新或插入的两种方法。
Future<void> executeBatch(List<MusicData> _list, int version) async {
await openDb();
batch = _database.batch();
try {
for (var i = 0; i < _list.length; i++) {
buildBatch(_list[i]);
}
batch.commit(noResult: true);
// Future<List> result = batch.commit();
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setInt('dbversion', version);
} catch (e) {
print(e);
}
}
Future<Batch> buildBatch(MusicData musicData) async {
await openDb();
int id = musicData.id;
Future<List<MusicData>> list1 =
getSongList("select * from songs where id=$id");
List<MusicData> list = await list1;
if (list.length != 0) {
batch.rawUpdate(
"UPDATE SONGS SET pdfpage = ?, linkid = ?, title = ?, album = ?, songURL = ?, hindiName = ?, mname = ?, msign = ?, other1 = ?, other2 = ?, ename = ?, esign = ?, language = ?,songtext = ? WHERE id = ?",
[
musicData.id,
musicData.pdfpage,
musicData.linkid,
musicData.title,
musicData.album,
musicData.songURL,
musicData.hindiName,
musicData.mname,
musicData.msign,
musicData.other1,
musicData.other2,
musicData.ename,
musicData.esign,
musicData.language,
musicData.songtext
]);
print("Record updated in db $id");
// _database.close();
} else {
batch.insert('SONGS', musicData.toMap());
print("Record inserted in db $id");
}
// List<Map> map = await _database.rawQuery("select * from SONGS where id = '++'");
}
解决方案
嗨,我认为您的功能中有批处理问题。第一批声明 atexecuteBatch
和第二批 at buildBatch
,所以这是两个不同的对象,第一个没有可执行语句。我只是有同样的问题,我找到了你的问题。在我的解决方案中,我创建了一个对象,我只是调用_database.batch().execuste(sql);
了不正确的方法。内德:
batch = _database.batch();
batch.execute(sql);
推荐阅读
- linux-kernel - 使用没有 libvirt 的 ubuntu 在 qemu 中定义大页面
- c# - UWP:导航视图未完全延伸到标题栏
- ios - 约束不能以编程方式快速工作
- c++ - Cmake Fails to Link DL Library
- linux - Struggling with Linux IPTables with dynamic IP
- scala - Accessing ScalaFX chart axis extreme values
- salesforce - 在工作区中找不到名为boatMessageChannel 的 LightningMessageChannel
- python - 打破 for 循环重复字符
- android - error while sha release key for my react native project
- laravel - Laravel 使用大写表名(如“AUTHS”)进行身份验证