2015-11-10 96 views
0

對於我的應用程序,我需要查詢大約40-50次的sqlite數據庫。我確信我寫的代碼效率很低。不幸的是,我無法在網上找到很多涉及多次查詢數據庫的例子。如何在Android上多次高效地查詢sqlite數據庫

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

這取決於你在表格中有多少行,如果你有大約100行,你可以一次加載一個Map中的整個數據,只是檢索。 –

+0

您是否真的測量了需要多長時間? –

回答

0

首先你,你只需要一個列值來改變您的查詢字符串,但使用的是

Select * 

,而不是

Select yourColumn 

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

IN(values) function of db instead of 

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

這在只有一個查詢返回的結果,你不必運行整個循環。