加速插入Sqlite数据库Android?

时间:2013-11-10 06:37:22

标签: android sqlite

我使用此函数将数据插入SQLite Android数据库:

 public long insertAccount(String code,String name,int s3,int s4,String s5,String   s6,int s7,
        int s8,int s9,int s10,int s11,String s12,String s13,int s14,int s15,int s16) {

    //container and place in it the information you want inserted, updated, etc.
    ContentValues initialValues = new ContentValues();
    initialValues.put(Code, code);
    initialValues.put(Name,name);
    initialValues.put(Type, s3);
    initialValues.put(Level1, s4);
    initialValues.put(Father, s5);
    initialValues.put(ACCCurr,s6);
    initialValues.put(AccNat, s7);
    initialValues.put(LowLevel, s8);
    initialValues.put(DefNum, s9);
    initialValues.put(AccClass, s10);
    initialValues.put(SubClass, s11);
    initialValues.put(SSClass1, s12);
    initialValues.put(SSClass2, s13);
    initialValues.put(Stype1, s14);
    initialValues.put(Stype2, s15);
    initialValues.put(Stype3, s16);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

但是插入大约70,000多行时需要花费很多时间!如何加快插入数据库的过程,插入完成后,如何在其上应用更新

3 个答案:

答案 0 :(得分:1)

一些选项:

  1. 预填充数据库。请参阅“Ship an application with a database

  2. 使用事务来减少等待I / O的时间。参见例如“Android SQLite database: slow insertion”。可能你不能在一个事务中包装所有70k行,但每个事务100-1000插入应该是可行的,将累积的I / O等待时间减少了几个数量级。

答案 1 :(得分:0)

使用PHP插入到SQLlite android中?怎么可能在Android手机中使用php,对不起我没有这个。

无论如何我相信你已经在这里编写了java代码,你想要在你的数据库中插入7k +记录。 在任何数据库中插入大量记录的样式称为“批量插入”,其目的是创建尽可能少的事务数,而不是一次性完成所有插入操作;如果关系数据库像sql server和oracle一样,它也是由特定的api完成的,但是在sqllite中,一个简单的老想法是用一堆数据进行单个事务

查看这篇使用相同技术http://www.techrepublic.com/blog/software-engineer/turbocharge-your-sqlite-inserts-on-android/的文章,并对其进行了很好的解释。

答案 2 :(得分:0)

您必须使用事务一次完成插入。你可以用这个:

//before insertion
db.beginTransaction();
//====do insertion
//after insertion
db.setTransactionSuccessful()
db.endTransaction();