2014-02-28 2 views
2

Пожалуйста, проверьте следующий код:java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 10 из CursorWindow

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

Он говорит, что это не удалось прочитать строку 0, столбец 10 из CursorWindow. Я проверил базу данных с помощью браузера SQLite. База данных имеет ровно 1 X в столбце 10, строка 0. SQL-запрос работает правильно, я считаю. Может кто-нибудь сказать мне, почему его нельзя читать? Или где ошибка?

РЕДАКТИРОВАТЬ: скорректировал код:

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

из-за целого значения 10-го столбца, но до сих пор нет удачи. Такая же ошибка

+0

Вы уверены, что колонка 10 - строка? Помните, что первый столбец - 0-й. Можете ли вы показать свой запрос на создание таблицы? – Tautvydas

+0

Исправлен код, как показано выше – user3340336

ответ

2

Ваш запрос имеет только один столбец в проекции - столбец «X». Этот столбец имеет индекс 0 в проекции запроса так, чтобы сделать код работы изменить свой цикл, чтобы выглядеть следующим образом:

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

Чтобы избежать такого рода проблем в будущем использовании следующее:

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

Помните, что индекс столбца связан с прогнозом запроса, а не с последовательностью столбцов в вашей базе данных, поэтому, например, когда вы пишете «select BAC from SOME_TABLE», столбец B будет иметь индекс 0, а столбец A будет иметь индекс 1 и т. д., даже если в вашей базе данных они в алфавитном порядке AB C.

0

У меня была такая же проблема. Для меня. Простая работа вокруг может быть:.

// 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 

ГДЕ «атр» является именем атрибута/колонок вы хотите запросить и anArrayList является ArrayList вы хотите хранить данные в

Смежные вопросы