无法从android数据库中获取正确的ID

问题描述:

我从数据库中获取一行作为游标。然后希望得到它的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

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(); 
    } 

让我知道这是否有助于

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()方法来使用。