Database Android:从数据库检索数据问题
我创建了以下从数据库检索存储设置的方法:Database Android:从数据库检索数据问题,database,android,sqlite,Database,Android,Sqlite,我创建了以下从数据库检索存储设置的方法: public String getEntry(long rowIndex){ String value = ""; Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_NAME, VALUE}, KEY_NAME + "=" + rowIndex, null, null, null, null); int columnIndex = c.getColumnIndex(VAL
public String getEntry(long rowIndex){
String value = "";
Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_NAME, VALUE}, KEY_NAME + "=" + rowIndex, null, null, null, null);
int columnIndex = c.getColumnIndex(VALUE);
int rowsCount = c.getCount();
if(rowsCount > 0){
String value = c.getString(columnIndex);
}
return value;
}
在调试时,我可以看到游标c包含两列和一行,但当它涉及到行时
String value = c.getString(columnIndex);
它抛出CursorIndexOutOfBoundsException,尽管columnIndex=1,它应该指向一个有效的条目
有人知道这里可能出了什么问题吗?我不知道您使用的DB包装器,但我想做两个猜测,因为我对Sqlite有点了解 它可以是:
c.getCount()
也可能带来麻烦。getCount可以做什么,在光标上计数?它可以迭代光标直到完成。当这种情况发生时,光标将耗尽,您只能重做整个操作。在这一点上阅读会让你失去一些东西。为了避免这个问题而不需要读取两次表,您应该自己读取所有行,然后自己进行计数。DB包装器中应该有一些方法(比如抛出异常或状态),您可以在其中检查游标是否已用尽当我正确理解DB包装器时,其中一个可能就是问题所在。在读取值之前,需要使用c.moveToNext()将光标移动到第一行:
public String getEntry(long rowIndex) {
String value = "";
Cursor c = db.query(DATABASE_TABLE, new String[] { KEY_NAME, VALUE },
KEY_NAME + "=" + rowIndex, null, null, null, null);
int columnIndex = c.getColumnIndex(VALUE);
if (c.moveToNext()) {
value = c.getString(columnIndex);
}
return value;
}
我在前面创建了一个数据库,它有两个字段名num 当我想使用游标从这个数据库检索数据时,出现了一些错误。 但是我可以使用返回的游标中的getCount()来计算d行 这是我的密码:
Cursor c=myDB.query(MY_DATABASE_TABLE,null,null,null,null,null,null);
Log.d("cursor",Integer.toString(c.getCount()));
if (c.moveToFirst())
{
do{
String data = c.getString(c.getColumnIndex("name"));
Log.v("yo",data);
}while(c.moveToNext());
}
错误是对字段插槽0的错误请求,-1 numrows=5,numcolumns=2我必须添加对moveNext()的调用。太多了!