当我向数据库(sqlite)发送请求以加载图像时,我的光标始终为-1。
public Cursor getData(int id){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME + " WHERE ID = " + id;
Log.d(TAG, query);
Cursor data = db.rawQuery(query, null);
return data;
}
结果是应用崩溃,该日志记录在logcat中:
致命异常:主要 流程:com.master.tobias.phono,PID:10721 android.database.CursorIndexOutOfBoundsException:已请求索引-1,大小为1
编辑:该查询在SQLite的数据库浏览器中正常工作。
答案 0 :(得分:1)
在访问游标数据之前尝试cursor.moveToFirst()
答案 1 :(得分:0)
尝试这个
public Cursor getData(int id){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME + " WHERE ID = " + id;
Log.d(TAG, query);
Cursor cursor= db.rawQuery(query, null);
while(cursor.moveToFirst()){
//get your value over here
}
return data;
}
答案 2 :(得分:0)
看一下Android的方法文档也很有帮助,因为它提供了有关该方法(如果期望作为参数并将返回)的更多信息。首先,db.rawQuery
运行提供的SQL,并在结果集上返回游标。
SQLiteDatabase
对于游标,您需要使用Cursor变量检查对象的存在。可以使用以下方法完成此操作:
cursor.moveToFirst();
将光标移到下一行。
如果光标已经超出结果集中的最后一个条目,则此方法将返回false。
Cursor
此方法将返回一个布尔值,您可以将其用于进一步的验证。如果布尔值为false,则游标中不包含任何数据/对象。如果是事实,则说明您已经存在数据。
因此,您缺少此功能,因此您需要将对象移动到第一行,这将使您能够确定查询是否为空。