Android sqlite无法';t从光标窗口读取第0行第1列
我试图从表中获取一个值Android sqlite无法';t从光标窗口读取第0行第1列,android,sqlite,android-cursor,Android,Sqlite,Android Cursor,我试图从表中获取一个值 cursor=db.rawQuery("select value from '" + tableName + "' where key= '" + name + "' ",null); if (cursor.getCount()>0){ if (cursor.moveToFirst()){ String value= cursor.getString(cursor.getColumnIndex("value"));
cursor=db.rawQuery("select value from '" + tableName + "' where key= '" + name + "' ",null);
if (cursor.getCount()>0){
if (cursor.moveToFirst()){
String value= cursor.getString(cursor.getColumnIndex("value"));
return value;
}
cursor.close();
}
我得到一个例外:
Couldn't read row 0, col -1 from Cursor Window.Make sure cursor is initialised correctly before accessing data from it.
当我使用:
cursor.getString(0);
我能够得到我需要的价值
如果我使用
cursor.getString(cursor.getColumnIndex("value"));
我有个例外
以下是我的表的快照:
您创建的表必须有一个名为_id的列。只有添加列索引为“_id”的列,该表才能工作
如果没有任何列索引为“\u id”的列。从设置->应用程序管理器显式卸载应用程序。并在添加所需列后重新运行应用程序。SQL中的表名和列名区分大小写。由于您的列名为“VALUE”,您需要获取ColumnIndex(“VALUE”)您的变量tableName为null.sry…我发布了错误的错误…我更新了问题@gabechanit是命名为VALUE还是VALUE?SQL对表名和列名是区分大小写的,即使它对关键字不区分大小写。总的来说,不要使用字符串附加来查询这样的值。将变量附加到SQL文本会导致SQL注入错误。改为使用绑定变量。然后使用getColumnIndex(“值”);SQLite会自动添加一个id列。另外,这不是一个要求,您可以创建一个没有返回值的表。顺便说一句,如果您不打算检查返回值,您也可以使用该方法——如果失败,它会给您提供更多有用的错误消息。值得一提的是,在SQL中,名称不区分大小写,但在
Cursor
API中,名称是区分大小写的。其实现是特定的。有些数据库区分大小写,有些则不区分大小写。SQLite是。在编写通用SQL代码时,更安全的假设是这样的。