问题描述
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/chatty ( 3905): uid=11130(u0_a1130) Thread-5 identical 2191 lines
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/chatty ( 3905): uid=11130(u0_a1130) Thread-5 identical 127 lines
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/chatty ( 3905): uid=11130(u0_a1130) Thread-5 identical 72 lines
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/chatty ( 3905): uid=11130(u0_a1130) Thread-5 identical 3 lines
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
I/Flutter ( 3905): Warning database has been locked for 0:00:10.000000. Make sure you always use the transaction object for database operations during a transaction
总而言之,我想说它要输入到表中的大约6-7,000个对象。在解决此问题的研究中,我遇到了一个名为批处理的概念,但是我没有看到足够完整的示例让我自己实现。
这是我的代码:
import 'dart:io';
import 'dart:async';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import '../models/located_company_model.dart';
class DBHelper {
static Database _database;
static final DBHelper db = DBHelper._();
DBHelper._();
Future<Database> get database async {
// if database exists,return database
if (_database != null) return _database;
// if database doesn't exist,create one
_database = await initDB();
return _database;
}
// create the database and LocatedCompany table
Future<Database> initDB() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path,'located_companies.db');
return await openDatabase(path,version: 1,onCreate: (Database db,int version) async {
await db.execute('''
CREATE TABLE Companies (
symbol TEXT PRIMARY KEY,exchange TEXT,name TEXT,region TEXT,currency TEXT
)
''');
});
}
// insert company on database
Future<void> insertCompany(LocatedCompany newCompany) async {
final db = await database;
final res = await db.insert('Companies',newCompany.toJson(),conflictAlgorithm: ConflictAlgorithm.replace,);
return res;
}
// delete all companies
Future<int> deleteallCompanies() async {
final db = await database;
final res = await db.rawDelete('DELETE FROM Companies');
return res;
}
Future<List<LocatedCompany>> getAllCompanies() async {
final db = await database;
final res = await db.rawQuery('SELECT * FROM COMPANIES');
List<LocatedCompany> list = res.isNotEmpty
? res.map((c) => LocatedCompany.fromJson(c)).toList()
: [];
return list;
}
//return single company's symbol by name search
Future<LocatedCompany> getCompanySymbol(String name) async {
final db = await database;
var response = await db.query('Companies',where: 'symbol = ?',whereArgs: [name]);
return response.isNotEmpty ? LocatedCompany.fromJson(response.first) : null;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)