优化SQLite插入

时间:2016-01-19 13:14:48

标签: android performance sqlite cursor content-values

我有一个下面的功能正常工作:

我使用它是因为在同步过程中我必须在不同的表中插入大量行(有时在同一个同步中超过30 000行),对于其中一些行,我收到的值从我的Json对象不是真正的对象。所以在插入行之前,我必须用另一个替换该值。这就是我使用这个功能的原因:

public void myFunction( String tableName, String attrName, ContentValues currentVal ) { 

    SQLiteDatabase database = this.getReadableDatabase();
    long realValue = -1;

    Cursor c = database.rawQuery("SELECT value FROM "+tableName+" WHERE "+tableName+".other_value = " + currentVal.getAsString(attrName), null);

    if( c.moveToFirst() ) { 
        realValue = c.getLong(0);
    }
    if( c != null ) c.close();

    currentVal.put( attrName, realValue );  

}

我的问题是Cursor ... c.moveToFirst()功能 影响过程的速度。

我做了研究,我找到了很多解释,如:

  

https://stackoverflow.com/a/15738831/5778152

我指定使用索引,我已经尝试过交易。

所以,我现在想做的(或者知道)是: 有没有办法执行类似的事情:

currentVal.put( attrName, SELECT value FROM "+tableName+" WHERE "+tableName+".other_value = " + currentVal.getAsString(attrName) );

因为有了这个技巧,我不必迭代到我的Cursor(这实际上是我的问题),当我插入ContentValues的内容时,它会自动处理子查询到检索要插入的实际值。

我还想过创建一个临时表。我插入在我的Json对象中创建的值而不更改它们,当我插入当前表的所有值时,我将它们复制到实际表中,同时将子查询重新分配给不正确的正确的值。

任何想法,建议,摘要,......都将受到赞赏

0 个答案:

没有答案