0

我在下面有一个运行良好的函数:

我使用它是因为在同步过程中,我必须在不同的表中插入很多行(有时在同一个同步中超过 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对象中建立的值而不更改它们,当我插入当前表的所有值时,我将它们复制到真实表中,同时取消子查询以将不正确的值替换为正确的值.

任何想法,建议,片段,......将不胜感激

4

0 回答 0