通过附加db更新sqlite表非常慢

时间:2014-02-17 09:50:22

标签: android performance sqlite

我的android设备上有一个主sqlite数据库(大量数据)和一个更新sqlite-database。 (数据我想更新)。 我想使用我的android应用程序在update-db中使用表(相同结构)的数据更新main-db中的表。 - 意味着删除更新中存在的main中的所有行。 - 将所有内容从更新插入到主页。

到目前为止,我的方法是:

 attach db 'path to update' updatedb
 delete from mytable where id in ( select id from updatedb.mytable )
 insert into mytable select * from mytable 

删除和插入非常慢(在我看来)。 有没有办法更快地做到这一点?

1 个答案:

答案 0 :(得分:0)

使用批量插入插入大量数据。这是代码:

在您的databaseHelper中:

public void batchInsert(String sql, ArrayList<String[]> values) {
    SQLiteDatabase db = getWritableDatabase();
    db.beginTransaction();

    SQLiteStatement stmt = db.compileStatement(sql);
    for (int i = 0; i < values.size(); i++) {
        String[] record = values.get(i);

        for (int ii = 0; ii < record.length; ii++) {
            stmt.bindString(ii + 1, record[ii]);
        }

        stmt.execute();
        stmt.clearBindings();
    }

    db.setTransactionSuccessful();
    db.endTransaction();
    db.close();
}

在您的活动中:

ArrayList<String[]> dataBatch = new ArrayList<String[]>();
        int x = 0;
        for (Data data : dataList) {


            String[] dataArray = { data.getData1(),data.getData2(),data.getData2() };

            dataBatch.add(questionsArray);              

        }

String sql = "INSERT INTO data ";
        sql += "(data1, data2, data3) ";
        sql += "VALUES (?,?,?)";

        DatabaseHelper dbhelper = new DatabaseHelper(context);
        dbhelper.batchInsert(sql, dataBatch);

基本上,您对databaseHelper的执行可能会有所不同。但那就是如何批量插入大量数据。