0

Cursor を使用してデータベースから値を取得しようとしています。私の問題は、DB から値を取得しようとすると、カーソルが範囲外になることです。それらの値を取得できる他の方法があるため、必要な値がDBに存在すると確信しています。値を取得したいCOLUMN_FIELDS_PARAMETER

丸太の猫:

05-09 11:24:17.872: E/AndroidRuntime(4113): FATAL EXCEPTION: main
05-09 11:24:17.872: E/AndroidRuntime(4113): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
05-09 11:24:17.872: E/AndroidRuntime(4113):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)

ここに私のコードがあります:値を入れます:

public void putParameters(int[] parameters, String exercise) {

    String parametersList = "";

    for(int i = 0; i < parameters.length; i++){

        if (parameters[i] != 0)
        {
            parametersList = parametersList + " " + parameters[i];
        }
    }   

    ContentValues cv = new ContentValues();
    cv.put(COLUMN_FIELDS_PARAMETER, parametersList);
    cv.put(COLUMN_EXERCISE, exercise);

    String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '" +  exercise + "'";
    String[] columns = new String[]{COLUMN_EXERCISE, COLUMN_FIELDS_PARAMETER};

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null, null);

    if(c == null)
        ourDatabase.insert(TABLE_NAME, null, cv);
    else
        ourDatabase.update(TABLE_NAME, cv, whereClause, null);
}



  public String getParameters(String exercise){

    String foo = "";

    String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '" +  exercise + "'";
    String[] columns = new String[]{COLUMN_EXERCISE, COLUMN_FIELDS_PARAMETER};

    Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , null, null, null, null);

    int parameter = c.getColumnIndex(COLUMN_FIELDS_PARAMETER);

        if (c != null)
        {
            c.moveToFirst();
            foo = c.getString(parameter);
            return foo;
        }   

    return foo;
}
4

1 に答える 1

0

whereParametersと一緒にある がありませんwhereClause。これを試して:

String whereClause = COLUMN_FIELDS_PARAMETER + "= ? and " + COLUMN_EXERCISE + "= '?'";
String[] whereParams = {field, exercise};

Cursor c = ourDatabase.query(TABLE_NAME, columns, whereClause , whereParams, null, null, null);

whereClauseには 2 つの があることに注意してください?。それぞれについて、String[] で値を指定し、whereParamsそれをクエリに渡す必要があります。それが行うことは?、それぞれを正しい値に置換することです (上記の例ではfieldexerciseを使用しています。これにより、SQL インジェクションから保護されます (したがって、ユーザーはexercise.

于 2013-05-09T11:34:51.307 に答える