如何在Android

时间:2015-11-10 04:20:31

标签: android sqlite

对于我的应用程序,我需要查询sqlite数据库大约40-50次。我确信我写的代码效率很低。不幸的是,我在网上找不到很多涉及多次查询数据库的例子。

String[] entryValArray = new String[indicesList.size()];
DBHelper dbHelper = new DBHelper(MainActivity.context);
SQLiteDatabase db = dbHelper.getReadableDatabase();

for (int i = 0; i < indicesList.size(); i++) {
    int moddedIndex = Integer.parseInt(indicesList.get(i), 16) % DBHelper.numEntries;
    String queryStr = "select * from " + DBHelper.TBL_NAME + " where " + DBHelper.IDStr +
            " = " + Integer.toString(moddedIndex);
    Cursor cursor = db.rawQuery(queryStr, null);
    if (cursor.moveToFirst())
        entryValArray[i] = cursor.getString(1);
    cursor.close();
}

基本上,我正在获取字符串列表,将它们转换为十六进制值,然后修改该值以获取sqlite数据库的索引。这是一个密码生成器应用程序。

有没有更好的方法来做到这一点,特别是在创建游标然后在每次迭代中关闭它时。

1 个答案:

答案 0 :(得分:0)

首先,您必须更改查询字符串,因为您只需要一个列值,但您正在使用

Select * 

而不是

Select yourColumn

。其次,如果你的索引列表大小不是很大,你可以使用

IN(values ) function of db instead of 

" where " + DBHelper.IDStr +" = " + Integer.toString(moddedIndex);

这将只返回一个您不必运行整个循环的查询中的结果。