无法从 android 中的数据库获取正确的 ID
cannot fetch proper id from DB in 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);
returns 您的 TABLE_PEERS
中列 KEY_SENDER_ID
的索引。
c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID))
returns TABLE_PEERS
中列 KEY_SENDER_ID
索引处的值。
你做错了什么:
在从中获取任何数据之前,您应该调用 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() 方法。
我从数据库中获取一行作为游标。然后想像这样获取它的 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);
returns 您的 TABLE_PEERS
中列 KEY_SENDER_ID
的索引。
c.getLong(c.getColumnIndexOrThrow(KEY_SENDER_ID))
returns TABLE_PEERS
中列 KEY_SENDER_ID
索引处的值。
你做错了什么:
在从中获取任何数据之前,您应该调用 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() 方法。