2012-01-29 99 views
0

我从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 + " " + ");"); 

,我插入的文本用这种方法:

 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; 
     } 

是否有优化它什么好的办法? 非常感谢!

回答

2

您需要大容量插入的速度。

使用DatabaseUtils.InsertHelper代替SQLiteDatabase.insert

+0

谢谢,我如何使用InsertHelper执行'UPDATE'? – Leandros 2012-01-29 16:09:03

+0

该死!这很快。我减少到只有3秒。大约20秒之前。史诗!非常感谢! – Leandros 2012-01-29 16:27:10

1

将此作为一个异步任务,并找出您的方法,如果您正在执行1000个查询,那么您已经遇到了设计问题。考虑改变你的方法。

+0

感谢。我不知道如何以另一种方式来实现我的目标。 我有一个ListView,有大约180个条目(从XML解析,因为一切都是可变的)。每个条目还包含4个其他数据(网址和名称)。 你有一个想法,我怎么能更好地接近它? – Leandros 2012-01-29 03:33:36

+0

不要把它放在一个列表中,而应该考虑把它分解成基于关系的方式,你不必查询任何事情。 – JoxTraex 2012-01-29 03:37:33

+0

手段我应该只插入,如果我需要它。好理想,但如何让这个工作。 我想这会让我的listview laggy。 – Leandros 2012-01-29 03:56:03

1

我同意最好的方法是使用线程,但是从UI的角度来看,以及Android推荐的内容(长期任务可能会被杀死以释放空间来执行更重要的任务),我会推荐使用Service。如果您可以管理作为服务运行您的大流程,但在您的活动中(通过绑定或广播)接收更新,您应该能够在进行所有处理的同时更新UI。

另外,关于JSON是否比XML更快有争议。有了这样复杂的事情,这可能是值得尝试的。最后,考虑使用SharedPreferences缓存数据(尤其是如果数据在会话之间不经常更改)。

+0

XML解析在1秒内完成。数据插入过去大约20秒... 数据变化不在我手中,它可以每天更改5次,或每周更改1次。 – Leandros 2012-01-29 04:15:55

+0

我不认为使用SharedPreferences的数据是一个好主意.. theres方式太多的数据要跟踪...不高效,需要太多的维护 – JoxTraex 2012-01-29 07:36:05

+0

这是一个很好的观点。数据库结构会更有效。 – Phil 2012-01-29 14:32:15