0

を使用してデータベースから単一の行を取得しようとしていますSQLiteが、何らかの理由でプログラムがクラッシュします。ログを検索すると、次のエラーが発生します。

インデックス-1はサイズ1で要求されます

Webで解決策を検索しましたが、コードが正しいようです。そのパラメータで行を削除できるので、位置が正しいことがわかります。それはおそらく私がクエリを書く方法ですが、私はそれの何が悪いのかわかりません。誰かが私が間違っている理由を見ることができますか?クエリのコードは次のとおりです。

    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY +   /jokes_table");

    final Uri _URI = Uri.parse(MyContentProvider.CONTENT_URI + "/2");
        String positions = intent.getStringExtra("position_in_db");
        Cursor cur = getBaseContext().getContentResolver().query(_URI, new String[] {"Joke","Author","Date","Status"} , MyContentProvider.ID + " = " + intent.getStringExtra("position_in_db") , null , null ); 

私のクエリメソッド:

    public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    String a;
    switch (sUriMatcher.match(uri)) 
    { 
    case COLLECTION_URI_INDICATOR: 
        qb.setTables(TABLE_NAME); 
        qb.setProjectionMap(projectionMap); 
        break; 
    case SINGLE_ITEM_URI_INDICATOR: 
        qb.setTables(TABLE_NAME); 
        qb.setProjectionMap(projectionMap); 
        qb.appendWhere(ID);
        break; 
    default: 
        throw new IllegalArgumentException("Unknown URI " + uri); 
    } 
    SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 
    Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, null); 

    c.setNotificationUri(getContext().getContentResolver(), uri); 
    return c; 

}

そのクエリですべての行を取得しようとすると、正常に機能します。唯一の問題は、特定の行を取得できないことです。クエリを呼び出す前に、で選択を変更し?て文字列を確認しようとしましたが、機能しません。によってカーソルからデータに到達しようとしています

    cur.getString(getColumnIndex("Joke"));

プログラムを終了します。誰かが私を助けてくれますか?

4

1 に答える 1

0

あなたとは何selectionですかselectionArgs

あなたはこれを試すことができます

selection = ROW_ID_COLUMN_NAME + " =? "; // take a note on the "Space" between this statement
selectionArgs = { ROW_ID };

c = qb.query(db, projection, selection, selectionArgs, null, null, null);

// moveToFirst() method may prevent error when accessing 0 row cursor.
if (c.moveToFirst()) {
    c.getString(getColumnIndex("Joke"));
}
于 2012-09-02T12:12:01.327 に答える