如何在没有for循环的情况下获取数据?
How to fetch data without for-loop?
这里我一个一个存值。 API有100万条数据。响应时间为3秒存储缓存需要很多时间。
如何像select插入查询一样一次性添加所有数据?
storeDefCatMaster(String url,String token) async {
final response = await http.get(
'${url}/v1.0/DefCatMaster',
headers: {'Authorization': 'Bearer ${token}'},
);
final jsonResponse = json.decode(response.body);
DefCatMaster model = DefCatMaster.fromJson(jsonResponse);
int length = model.data.length;
for(int i=0; i<length; i++) {
var data = DataDefCatMaster(
deF_CAT_ID: model.data[i].deF_CAT_ID,
description: model.data[i].description,
in_use: model.data[i].in_use,
sortOrder: model.data[i].sortOrder
);
await helper.insert(data);
}
}
sqflite 提供了批处理 api,它减少了本机代码和 dart 代码之间的来回,这可能会提高性能。
示例代码:
batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();
像这样批量插入:
batch = db.batch();
for(int i=0; i<length; i++) {
var data = DataDefCatMaster(
deF_CAT_ID: model.data[i].deF_CAT_ID,
description: model.data[i].description,
in_use: model.data[i].in_use,
sortOrder: model.data[i].sortOrder
);
batch.insert('table_name', data);
}
results = await batch.commit();
//or
//await batch.commit(noResult: true);
// if you dont want result, this will improve performance as well.
您仍将使用 for 循环,但使用上述代码性能会好得多。
这里我一个一个存值。 API有100万条数据。响应时间为3秒存储缓存需要很多时间。
如何像select插入查询一样一次性添加所有数据?
storeDefCatMaster(String url,String token) async {
final response = await http.get(
'${url}/v1.0/DefCatMaster',
headers: {'Authorization': 'Bearer ${token}'},
);
final jsonResponse = json.decode(response.body);
DefCatMaster model = DefCatMaster.fromJson(jsonResponse);
int length = model.data.length;
for(int i=0; i<length; i++) {
var data = DataDefCatMaster(
deF_CAT_ID: model.data[i].deF_CAT_ID,
description: model.data[i].description,
in_use: model.data[i].in_use,
sortOrder: model.data[i].sortOrder
);
await helper.insert(data);
}
}
sqflite 提供了批处理 api,它减少了本机代码和 dart 代码之间的来回,这可能会提高性能。
示例代码:
batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();
像这样批量插入:
batch = db.batch();
for(int i=0; i<length; i++) {
var data = DataDefCatMaster(
deF_CAT_ID: model.data[i].deF_CAT_ID,
description: model.data[i].description,
in_use: model.data[i].in_use,
sortOrder: model.data[i].sortOrder
);
batch.insert('table_name', data);
}
results = await batch.commit();
//or
//await batch.commit(noResult: true);
// if you dont want result, this will improve performance as well.
您仍将使用 for 循环,但使用上述代码性能会好得多。