对于我的应用程序,我需要查询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数据库的索引。这是一个密码生成器应用程序。
有没有更好的方法来做到这一点,特别是在创建游标然后在每次迭代中关闭它时。
答案 0 :(得分:0)
首先,您必须更改查询字符串,因为您只需要一个列值,但您正在使用
Select *
而不是
Select yourColumn
。其次,如果你的索引列表大小不是很大,你可以使用
IN(values ) function of db instead of
" where " + DBHelper.IDStr +" = " + Integer.toString(moddedIndex);
这将只返回一个您不必运行整个循环的查询中的结果。