Sqlite如何提高性能?

Brbcod1

我必须从我的数据库中进行 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章