Ошибка в 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
};