2016-02-13 103 views
0

我從數據庫中獲取一行作爲遊標。然後希望得到它的ID是這樣的:無法從android數據庫中獲取正確的ID

String selectQuery = "SELECT * FROM " + TABLE_PEERS + " WHERE " + KEY_NAME + "= '" + peer.name +"'"; 
Cursor c = db.rawQuery(selectQuery, null); 

Log.d("count", c.getCount()+""); // display: count: 1 in LogCat 
long peer_id = c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID)); // error occurs in this line; 

它始終顯示錯誤:

Problems receiving packet: Index -1 requested, with a size of 1

,當我改變:

long peer_id = c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID));

long peer_id = c.getColumnIndexOrThrow(KEY_SENDER_ID); Log.cat("****": peer_id+"");

LogCat將顯示****:0。但它假設顯示1

任何人都可以解釋導致差異的原因以及我的代碼中哪裏出錯?提前致謝。

+0

是KEY_SENDER_ID您正在查找的ID列? – Peshal

+0

@Peshal是啊... – sydridgm

+1

我想你需要移動光標一次才能訪問第一個項目:c.moveToNext() – Peshal

回答

0

c.getColumnIndexOrThrow(KEY_SENDER_ID);返回您的TABLE_PEERS中列KEY_SENDER_ID的索引。

c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID))返回列KEY_SENDER_ID的索引TABLE_PEERS處的值。

你在做什麼錯誤: 你應該在從中獲取任何數據之前調用cursor.moveToFirst

Code Snippet: 

    String selectQuery = "SELECT * FROM " + TABLE_PEERS + " WHERE " + KEY_NAME + "= '" + peer.name +"'"; 
    Cursor c = db.rawQuery(selectQuery, null); 
    if (c != null) {  
     if (c.getCount > 0) { 
     c.moveToFirst(); 
     Log.d("count", c.getCount()+""); // display: count: 1 in LogCat 
     long peer_id = c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID)); 
     } 
    cursor.close(); 
    } 

讓我知道這是否有助於

0
String selectQuery = "SELECT * FROM " + TABLE_PEERS + " WHERE " + KEY_NAME + "= '" + peer.name +"'"; 
     Cursor c = db.rawQuery(selectQuery, null); 
     if (c.moveToFirst()) { 
      long peer_id = c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID)); 
      Log.d("peer_id", peer_id + ""); 
     } 
     cursor.close(); 

你必須在第一moveToFirst()方法來使用。

相關問題