数据库插入花费太多时间 - android sqlite

时间:2013-05-08 06:21:53

标签: android android-sqlite sqlite

我试图在sqlite数据库中插入大约2800条记录,这需要150秒,这太过分了!任何人都可以告诉你如何优化这种插入。

    public void createVariantEntry(ArrayList<ArrayList<String>> str) {
        InsertHelper ih = new InsertHelper(Database, VARIANT_TABLE_NAME);
        final int varid = ih.getColumnIndex(VARIANT_ID);
        final int varmakeid = ih.getColumnIndex(VARIANT_MAKE_ID);
        final int varmodid = ih.getColumnIndex(VARIANT_MODEL_ID);
        final int varname = ih.getColumnIndex(VARIANT_NAME);
        final int varposteddate = ih.getColumnIndex(VARIANT_POSTED_DATE);               
        for(int i=0;i<1253;i++)
        {           
            ih.prepareForInsert();
            ih.bind(varid, str.get(i).get(0));
            ih.bind(varmakeid, str.get(i).get(1));
            ih.bind(varmodid, str.get(i).get(2));
            ih.bind(varname, str.get(i).get(3));
            ih.bind(varposteddate, str.get(i).get(4));
            ih.execute();
        }                       
        for(int i=1255;i<str.size();i++)
        {               
            ih.prepareForInsert();
            ih.bind(varid, str.get(i).get(0));
            ih.bind(varmakeid, str.get(i).get(1));
            ih.bind(varmodid, str.get(i).get(2));
            ih.bind(varname, str.get(i).get(3));
            ih.bind(varposteddate, str.get(i).get(4));
            ih.execute();
        }           
        ih.close(); 
    }

2 个答案:

答案 0 :(得分:2)

以下是一些可能对您有所帮助的一般提示:

在此之后,您将需要针对您的具体情况进行一些基准测试和优化,分析性能与数据完整性权衡等。祝您好运。

答案 1 :(得分:2)

使用交易时会获得很大的性能提升。

try {
    SQLiteDatabase db = MySQLiteOpenHelper.getWritableDatabse();
    ContentValues values = new ContentValues();
    db.beginTransaction();
    while ( more_data_to_insert ) {
        // put the data in 'values'
        values.put("col_1", data_1);
        values.put("col_2", data_2);
        // ...
        values.put("col_n", data_n);

        // Insert the row into the database.
        db.insert("table_name", null, values);
    }
    db.setTransactionSuccessful();
} catch ( SQLiteException e ) {
    // handle your sqlite errors
} finally {
    db.endTransaction();
}

并且不要使用InsertHelper。它已被弃用了。