Ошибка в db.query и ее метод

Я пытаюсь прочитать 2-й столбец в последней записи с помощью курсора. Во-первых, выглядит ли макет кода для запроса и метода работоспособным? Если нет, то что можно улучшить?

Во-вторых, мне не хватает опыта для обнаружения ошибки, и я был бы признателен за предложение исправить код.

из класса:

SQLiteDatabase db = this.getWritableDatabase();
try {
                Cursor cursor = this.getSurveyData();
                if(cursor.moveToLast())
                    {cursor.moveToLast();
                        String name = cursor.getString(2);
                        Log.v(TAG,name);
                    }
                cursor.close();
            }catch (SQLiteException e )
                                        {
                                            Log.v(TAG, "Exception " + e.getMessage());
                                        }

запрос:

    public Cursor getSurveyData(){
      SQLiteDatabase db = this.getWritableDatabase();
    String[] projection = {
             COLUMN_DATO1
                          };
         // String sortOrder = "ID1" + " DESC";

      return db.query(
              table1,
              projection,
              null,null,null,null,null,null
                     );
  }    

Ошибка отладки:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.android.parkinsonaider, PID: 4092
              java.lang.IllegalStateException: Couldn't read row 6, col 2 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                  at android.database.CursorWindow.nativeGetString(Native Method)
                  at android.database.CursorWindow.getString(CursorWindow.java:438)
                  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
                  at com.example.android.parkinsonaider.DatabaseHelper.insertData1(DatabaseHelper.java:153)
                  at com.example.android.parkinsonaider.InfoActivity$1.onClick(InfoActivity.java:91)
                  at android.view.View.performClick(View.java:5198)
                  at android.view.View$PerformClick.run(View.java:21147)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Отключен от целевой виртуальной машины, адрес: "localhost:8603", транспорт: "сокет"

Спасибо всем, я переписал это немного, работает сейчас. Далее нужно сравнить даты, чтобы увидеть, добавлять ли или добавлять в базу данных. Это другая история.

String dd1="",dbdato="";
            SQLiteDatabase db = this.getWritableDatabase();
            long millis1=System.currentTimeMillis();
            final Date dat1=new java.sql.Date(millis1);
            dd1 = dat1.toString();

            Cursor cursor = db.query(table1,new String[]{COLUMN_DATO1},null,null,null,null,null);
            if (cursor.moveToLast()) {
            cursor.moveToLast();
            dbdato = cursor.getString(cursor.getColumnIndex(COLUMN_DATO1));
            }

1 ответ

Ваша проекция содержит только один столбец, вам нужно добавить все, что вы хотите получить:

 String[] projection = {
         COLUMN_DATO1,
         COLUMN_DATO2
                      };
Другие вопросы по тегам