0

PendingIntent の一意の識別番号が格納されているデータベースの簡単なクエリを実行しようとしています。必要に応じて、AlarmManager によって設定された通知をキャンセルできるようにします。値の挿入は正常に機能しますが、エラーを克服できません。

java.lang.IllegalArgumentException: インデックスが範囲外であるため、インデックス 1 で引数をバインドできません。ステートメントには 0 個のパラメーターがあります。

データベース構造: public class 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 と通常のクエリの両方でこれを実行しようとしましたが、成功しませんでした。

4

1 に答える 1

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();
于 2013-07-07T22:49:00.810 に答える