请检查以下代码:
List<Database> zaznamy = new ArrayList<Database>();
String selectQuery = "SELECT X FROM Data WHERE LEVEL_1 =-24 AND LEVEL_2 =-48 AND LEVEL_3 =-55 AND LEVEL_4 =0";
File dbfile = new File("/sdcard/rtls/Databases/"+DBName );
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
Cursor cursor = db.rawQuery(selectQuery,null);
String bodX="empty";
if (cursor.moveToFirst())
{
do {
Database zaznam = new Database();
zaznam.setX(Integer.parseInt(cursor.getString(10)));
zaznamy.add(zaznam);
} while (cursor.moveToNext());
for (Database cn : zaznamy)
{
Log.d("X: ", Integer.toString(cn.getX()));
bodX = (cn.getX()+ "//").toString();
Log.d("X", bodX);
}
}
它说它无法从CursorWindow中读取第0行第10列。我已经用sqlite浏览器测试了数据库。数据库在第10列第0行正好有1个x。我相信sql查询工作正常。有人能告诉我,为什么看不懂?或者错误在哪里?
编辑:
将代码更正为:
do {
Database zaznam = new Database();
zaznam.setX(cursor.getInt(10));
zaznamy.add(zaznam);
} while (cursor.moveToNext());
因为第10列的整数值,但仍然不走运。同样的错误
最佳答案
您的查询在投影列“x”中只有一列。该列在查询投影中有索引0,因此要使代码正常工作,请将循环更改为如下所示:
do {
Database zaznam = new Database();
zaznam.setX(cursor.getInt(0));
zaznamy.add(zaznam);
} while (cursor.moveToNext());
为避免将来出现此类问题,请使用以下方法:
cursor.getInt(cursor.getColumnIndexOrThrow("X");
请记住,列索引与查询投影有关,而与数据库中的列序列无关,因此,例如,当您编写“从某个表中选择b a c”时,列b将具有索引0,列a将具有索引1等,即使在数据库中它们是按字母顺序a b c排列的。