2014-02-28 89 views
2

逐行讀取0,列10請檢查下面的代碼:java.lang.IllegalStateException:無法從CursorWindow

List<Database> zaznamy = new ArrayList<Database>(); 
    String selectQuery = "SELECT X FROM Data WHERE LEVEL_1 =-24 AND LEVEL_2 =-48 AND LEVEL_3 =-55 AND LEVEL_4 =0"; 
    File dbfile = new File("/sdcard/rtls/Databases/"+DBName); 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 
    Cursor cursor = db.rawQuery(selectQuery,null); 

    String bodX="empty"; 
    if (cursor.moveToFirst()) 

     { 
     do { 
      Database zaznam = new Database(); 
      zaznam.setX(Integer.parseInt(cursor.getString(10))); 
      zaznamy.add(zaznam); 
     } while (cursor.moveToNext()); 

     for (Database cn : zaznamy) 
     { 
      Log.d("X: ", Integer.toString(cn.getX())); 
      bodX = (cn.getX()+ "//").toString(); 
      Log.d("X", bodX); 
     } 
    } 

它說,它無法從CursorWindow逐行讀取0,列10。我用SQLite瀏覽器測試了數據庫。數據庫在第10列第0行處恰好有1個X.我相信SQL查詢正常工作。有人能告訴我,爲什麼它不能被讀取?或者哪裏出錯?

編輯: 糾正代碼:

do { 
      Database zaznam = new Database(); 
      zaznam.setX(cursor.getInt(10)); 
      zaznamy.add(zaznam); 
     } while (cursor.moveToNext()); 

因爲第十列整數值,但仍然沒有運氣。相同的錯誤

+0

你肯定列10是一個字符串?請記住,第一列是第0列。你可以顯示你的表創建查詢嗎? – Tautvydas

+0

更正了上面顯示的代碼 – user3340336

回答

2

您的查詢在投影中只有一列 - 列'X'。該列的索引爲0查詢投影這樣使你的代碼工作改變你的循環,如下所示:

do { 
     Database zaznam = new Database(); 
     zaznam.setX(cursor.getInt(0)); 
     zaznamy.add(zaznam); 
} while (cursor.moveToNext()); 

爲了避免那種在以後的使用問題如下:

cursor.getInt(cursor.getColumnIndexOrThrow("X"); 

記住列索引與查詢投影相關,而不是數據庫中列的順序,因此,例如,當您編寫「從SOME_TABLE選擇BAC」列B將具有索引0,並且列A將具有索引1等,即使在數據庫中它們按英文字母順序排列。AB C.

0

我遇到了同樣的問題。爲了我。一個簡單的解決辦法可能是:

// query database and populate an ArrayList 
private void getDataFromDatabase() { 
    Cursor cursor = dbConnector.getSomeData(); 
    if (cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     for(int i = 0; i < cursor.getCount(); i++) { 
      // get column data from database and add it to ArrayList 
      anArrayList.add(cursor.getString(cursor.getColumnIndexOrThrow("Attr"))); 

      cursor.moveToNext(); 
     } // end for 
    } // end if 
    dbConnector.close(); 
} // end getDataFromDatabase 

WHERE「的Attr」是您要查詢的屬性/列名和anArrayList是你想要將數據存儲在ArrayList中

相關問題