我必须从我的数据库中进行 300 多个选择。这些查询中的每一个都必须在 for each 循环内调用,这是一个示例:
for(int id : myids){
Cursor cursor = MyDatabaseHelper.runMyQuery(id);
while(cursor.moveToNext()){
//my stuff...
}
}
MyDatabaseHelper 是一个数据库助手类的实例,功能是这样的
public Cursor runMyQuery(int id){
SQLiteDatabase db = this.getWritableDatabase();
Cursor ret = db.rawQuery("select Name, Surname, Age from PTable where Id = " + id, null);
return ret;
}
有人告诉我,由于多次查询,数据库的不断“打开和关闭”是我性能问题的原因,而我应该进行单个查询(使用联合等)。将我的代码更改为单个查询将意味着更改整个数据库,我希望不要这样做。
我可以做些什么来提高性能并同时保持多个选择?谢谢
您可以返回Cursor
包含所有行的单个。
首先将您的runMyQuery()
方法更改为:
public Cursor runAll(String list){
SQLiteDatabase db = this.getWritableDatabase();
String sql = "select Name, Surname, Age from PTable where " + list + " like '%,' || id || ',%'"
Cursor ret = db.rawQuery(sql, null);
return ret;
}
因此,您将runAll()
一个字符串传递给该方法,该字符串是id
您拥有的所有s的逗号分隔列表,myids
并使用操作符LIKE
将其与每个id
表进行比较。
您创建此列表并在如下Cursor
对象中获取结果:
StringBuilder sb = new StringBuilder(",");
for(int id : myids){
sb.append(String.valueOf(id)).append(",");
}
String list = sb.length() > 1 ? sb.toString() : "";
if (list.length() > 0) {
Cursor c = runAll(list);
while(c.moveToNext()){
//your stuff...
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句