我正在制作一个android数据库应用程序,当我使用光标从数据库获取值时它给出了以下异常:
java.lang.IllegalStateException: get field slot from row 0 col -1 failed
我使用以下代码进行抓取:
public Cursor fetchChildren(String KEY_){
Cursor c = db.rawQuery("SELECT children FROM " + DATABASE_TABLE_NAVIGATION
+ " WHERE key_ = ?", new String[] {KEY_});
return c;
}
try{
for(int k=0;k<n;k++){
db.open();
System.out.println("children are");
Cursor cursor=db.fetchChildren(keys_a);
if (cursor.moveToFirst()) // data?
{
System.out.println( cursor.getString(9));
}
}
db.close();
}
catch(Exception e)
{
System.out.println(e);
}
用System.out.println( cursor.getString(0))
代替System.out.println( cursor.getString(9));
或者使用System.out.println(cursor.getString(cursor.getColumnIndex("children"));
问题在你的逻辑:
您正在从数据库中获取单个列。所以游标只有一列(子)。您知道列索引从0开始(第一列为0,第二列为1…),您必须在getString()
中传递0。另一种方法是,在游标中搜索列索引并将其传递给getString()
。作为getColumnIndex(java.lang.String)计算游标中列名的索引,并在getString(int)中使用它。