无法从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
。
任何人都可以解释导致差异的原因以及我的代码中哪里出错?提前致谢。
答
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()方法来使用。
是KEY_SENDER_ID您正在查找的ID列? – Peshal
@Peshal是啊... – sydridgm
我想你需要移动光标一次才能访问第一个项目:c.moveToNext() – Peshal