2013-07-07 5 views
0

Я пытаюсь сделать простой запрос моей базы данных, где для 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, так и с обычным запросом, но без успеха.

ответ

0

Перепишите ваш необработанный запрос:

String select = "SELECT "+NOTIFICATION+" FROM "+DATABASE_TABLE+" WHERE "+NOTIFICATION+"=?"; 
Cursor c = db.rawQuery(select,new String[]{""+notifId}); 
if(c!=null && c.getCount()>0) { 
    c.moveToFirst(); 
} 
c.close(); 
+0

Спасибо за ваш ответ, но сейчас я получаю сообщение об ошибке: java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 2 из CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно. Это также происходит в альтернативном методе. –

+0

Не используйте c.getInt (COL_NOTIFICATION). Используйте c.getInt (c.getColumnIndex (NOTIFICATION)). – flogvit

+0

Благодарим за помощь. Очень благодарен :) –

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