我有一个下面的功能正常工作:
我使用它是因为在同步过程中我必须在不同的表中插入大量行(有时在同一个同步中超过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()
功能
影响过程的速度。
我做了研究,我找到了很多解释,如:
我指定使用索引,我已经尝试过交易。
所以,我现在想做的(或者知道)是: 有没有办法执行类似的事情:
currentVal.put( attrName, SELECT value FROM "+tableName+" WHERE "+tableName+".other_value = " + currentVal.getAsString(attrName) );
因为有了这个技巧,我不必迭代到我的Cursor
(这实际上是我的问题),当我插入ContentValues
的内容时,它会自动处理子查询到检索要插入的实际值。
我还想过创建一个临时表。我插入在我的Json
对象中创建的值而不更改它们,当我插入当前表的所有值时,我将它们复制到实际表中,同时将子查询重新分配给不正确的正确的值。
任何想法,建议,摘要,......都将受到赞赏