Я пытаюсь сделать простой запрос моей базы данных, где для PendingIntent хранится уникальный идентификационный номер. Чтобы разрешить мне отменять уведомление, установленное AlarmManager, если необходимо. Вставка значения работает нормально, но я не могу преодолеть ошибку:Android SQLite не может связывать аргумент
java.lang.IllegalArgumentException: не удается связать аргумент с индексом 1, потому что индекс выходит за пределы диапазона. Оператор имеет 0 параметров.
структурабазы данных: общественного класс DBAdapter {
private static final String TAG = "DBAdapter";
public static final String KEY_ROWID = "_id";
public static final String TASK = "task";
public static final String NOTIFICATION = "notification";
public static final int COL_ROWID = 0;
public static final int COL_TASK = 1;
public static final int COL_NOTIFICATION = 2;
public static final String[] ALL_KEYS = new String[] {KEY_ROWID, TASK, NOTIFICATION};
// DB info: it's name, and the table.
public static final String DATABASE_NAME = "TaskDB";
public static final String DATABASE_TABLE = "CurrentTasks";
public static final int DATABASE_VERSION = 3;
private static final String DATABASE_CREATE_SQL =
"create table " + DATABASE_TABLE
+ " (" + KEY_ROWID + " integer primary key, "
+ TASK + " text not null, "
+ NOTIFICATION + " integer"
+ ");";
Теперь я создал метод для извлечения уведомления ID из базы данных по мере необходимости, используя следующий код:
public int getNotifID(long notifID){
String[] x = {ALL_KEYS[2]};
String[]args = new String[]{NOTIFICATION};
String where = NOTIFICATION + "=" + notifID;
int y = 0;
//String select = "SELECT "+NOTIFICATION+" FROM "+DATABASE_TABLE+" WHERE "+notifID+"="+NOTIFICATION;
//Cursor c = db.rawQuery(select,new String[]{});
Cursor c = db.query(true,DATABASE_TABLE,x,Long.toString(notifID),args,null,null,null,null,null);
if (c!= null && c.moveToFirst()){
y = c.getInt(COL_NOTIFICATION);
}
return y;
}
Как вам может видеть, что я попытался сделать это как с rawQuery, так и с обычным запросом, но без успеха.
Спасибо за ваш ответ, но сейчас я получаю сообщение об ошибке: java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 2 из CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно. Это также происходит в альтернативном методе. –
Не используйте c.getInt (COL_NOTIFICATION). Используйте c.getInt (c.getColumnIndex (NOTIFICATION)). – flogvit
Благодарим за помощь. Очень благодарен :) –