我从XML解析数据并将其插入到我的数据库中。但这些最多1000个Querys必须在应用程序启动之前完成。
因为我必须使用FTS3搜索,插入会显着减慢。
在我添加FTS3搜索之前,我使用了BLOB
。这很快。我怎样才能加快速度?
我使用这个FTS3表:
db.execSQL("CREATE VIRTUAL TABLE " + TABLE_FTS + " USING fts3(" + COL_ID + ", " + COL_KEY_ID + ", " + COL_KEY_NAME + ", "
+ COL_KEY_WEBURL + ", " + COL_KEY_MAINURL + ", " + COL_KEY_LOGO + " " + ");");
我用这个方法插入String:
int init = 0;
for(int t = init; t < arr.length; t++){
Log.i(TAG, "arr["+t+"] = " + arr[t].trim());
if(r == 1) {
database.execSQL("INSERT INTO table (id) VALUES ('" + arr[t].trim() + "')");
id_save = arr[t].trim();
r++;
}else if(r == 2) {
database.execSQL("UPDATE table SET name='" + arr[t].trim() + "' WHERE id='" + id_save + "'");
name_save = arr[t].trim();
r++;
}else if(r == 3) {
database.execSQL("UPDATE table SET weburl='" + arr[t].trim() + "' WHERE id='" + id_save + "' AND name='" + name_save + "'");
r++;
}else if(r == 4) {
database.execSQL("UPDATE tables SET mainurl='" + arr[t].trim() + "' WHERE id='" + id_save + "' AND name='" + name_save + "'");
r++;
}else if(r == 5) {
database.execSQL("UPDATE table SET logo='" + arr[t].trim() + "' WHERE id='" + id_save + "' AND name='" + name_save + "'");
r = 1;
}
有没有什么好方法可以优化它? 非常感谢!
答案 0 :(得分:2)
您需要批量插入的速度。
使用 DatabaseUtils.InsertHelper 代替 SQLiteDatabase.insert
答案 1 :(得分:1)
将此作为异步任务,并找出您的方法,如果您正在进行1000次查询,那么您已经遇到了设计问题。考虑改变你的方法。
答案 2 :(得分:1)
我同意最好的方法是使用线程,但是从UI的角度来看,以及Android推荐的内容(长任务可以被释放到更多重要任务的空闲空间),我建议使用一个Service
。如果您可以管理作为服务运行大型流程,但在活动中接收更新(通过绑定或广播),则应该能够在执行所有处理时更新UI。
此外,关于JSON是否比XML更快还存在争议。对于这种复杂的东西,它可能值得尝试。
最后,考虑使用SharedPreferences缓存数据(特别是如果数据在会话之间不经常更改)。