请检查以下代码:

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排列的。

10-07 19:35