user3340336
user3340336

Reputation: 37

java.lang.IllegalStateException: Couldn't read row 0, col 10 from CursorWindow

Please check following code:

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);
        }
    }

It says it Couldn't read row 0, col 10 from CursorWindow. I´ve tested the database with SQLite browser. Database has exactly 1 X at column 10, row 0. SQL query is working correctly I believe. Can someone tell me, why it cant be read? Or where is mistake?

EDIT: corrected the code to:

do {
            Database zaznam = new Database();
            zaznam.setX(cursor.getInt(10));
            zaznamy.add(zaznam);
        } while (cursor.moveToNext());

because of integer value of 10th column, but still no luck. Same error

Upvotes: 2

Views: 5377

Answers (2)

Neutrino
Neutrino

Reputation: 321

I was having the same issue. For me. A simple work around may be:

// query database and populate an ArrayList
private void getDataFromDatabase() {
    Cursor cursor = dbConnector.getSomeData();
    if (cursor.getCount() > 0) {
        cursor.moveToFirst();
        for(int i = 0; i < cursor.getCount(); i++) {
            // get column data from database and add it to ArrayList
            anArrayList.add(cursor.getString(cursor.getColumnIndexOrThrow("Attr")));

            cursor.moveToNext();
        } // end for
    } // end if
    dbConnector.close();
} // end getDataFromDatabase

WHERE "Attr" is the Attribute/column name you wish to query and the anArrayList is the ArrayList you want to store the data in.

Upvotes: 0

Leszek
Leszek

Reputation: 6598

Your query has only one column in projection - column 'X'. That column has index 0 in query projection so to make your code work change your loop to looks like this:

do {
        Database zaznam = new Database();
        zaznam.setX(cursor.getInt(0));
        zaznamy.add(zaznam);
} while (cursor.moveToNext());

To avoid that kind of problems in the future use following:

cursor.getInt(cursor.getColumnIndexOrThrow("X");

Remember that column index is related to query projection and not the sequence of columns in your database, so for example when you write "select B A C from SOME_TABLE" column B will have index 0 and column A will have index 1 etc. even if in your database they are in alphabetical order A B C.

Upvotes: 3

Related Questions