1

Androidでreturnquery(selection、null、null、null)を使用してクエリを実行しようとしていますが、複数の演算子と括弧を使用すると、必要な結果を返すことができません。これが私がやろうとしていることです:

    selection = "(KEY_VARIABLE > '5' AND KEY_VARIABLE2 = 'Yes') OR (KEY_VARIABLE < '5' AND KEY_VARIABLE2 = 'No')"

ただし、クエリは括弧を認識しないため、クエリは0の結果を返します。

演算子ステートメント内に演算子が埋め込まれた複数の演算子を使用してAndroidでクエリを作成する方法はありますか?

更新:logcatにも例外はありません。埋め込まれたOR(AND)ステートメントを除いて、すべてが正常に機能します。コードは次のとおりです。

 public Cursor getTierSchools() {

    String range = "";
    String range2 = "";
    String range3 = "";
    double score = LabValues.myscore;
    double scoreplustwo = score + 2;
    double scoreminustwo = score - 2;
    double scoreplusfive = score + 5;
    double scoreminusfive = score - 5;
    double scoreminusone = score - 1;

    range = "( " + KEY_SCHOOLSCORE + " > " + "'" + scoreplusfive + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'Yes' AND " + KEY_SCHOOLSTATELONG + " = " + "'" + LabValues.mystate + "'" + " )";
    range2 = " OR " + "( " + KEY_SCHOOLSCORE + " > " + "'" + scoreminusone + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'Yes' AND " + KEY_SCHOOLSTATELONG + " != " + "'" + LabValues.mystate + "'" + " )";
    range3 = " OR " + "( " + KEY_SCHOOLSCORE + " > " + "'" + scoreplustwo + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'No'" + " )";         

    String selection = range + range2 + range3;
    return query(selection, null, null, sorting);

}

private Cursor query(String selection, String[] selectionArgs, String[] columns, String sortOrder) {
    SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
    builder.setTables(FTS_VIRTUAL_TABLE);
    builder.setProjectionMap(mColumnMap);

    Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
            columns, selection, selectionArgs, null, null, sortOrder);

    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return cursor;
}

基本的に、私はANDステートメントを括弧内に統合しようとしています。これは、次のような方程式を作成する方法と似ています。(4 + 4)/ 8=1は4+4/8=4.5と等しくありません。

解決:

    range = "(( " + KEY_SCHOOLSCORE + " > " + "'" + scoreplusfive + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'Yes' AND " + KEY_SCHOOLSTATELONG + " = " + "'" + LabValues.mystate + "'" + " )";
    range2 = " OR " + "( " + KEY_SCHOOLSCORE + " > " + "'" + scoreminusone + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'Yes' AND " + KEY_SCHOOLSTATELONG + " != " + "'" + LabValues.mystate + "'" + " )";
    range3 = " OR " + "( " + KEY_SCHOOLSCORE + " > " + "'" + scoreplustwo + "'" + " AND " + KEY_SCHOOLSTATEBIAS + " = 'No'" + " ))";        
4

0 に答える 0