0

enter code hereロケーション参照 = "文字列" である Android SQLite データベース テーブルのすべての行を抽出するクエリを作成しようとしています。データベース ヘルパー クラスで次のコードを使用しています。

public Cursor fetchComponentsForLocation(String locationRef) {
    Cursor mCursor =
            rmDb.query(true, LOCATIONS_TABLE, new String[] {
                    LOCATION_ID, RUN_LINK, AREA_LINK, INSPECTION_LINK, LOCATION_REF, RACKING_SYSTEM, COMPONENT, POSITION, RISK, ACTION_REQUIRED, NOTES_GENERAL, MANUFACTURER, TEXT1, TEXT2, TEXT3, TEXT4, NOTES_SPEC}, 
                    LOCATION_REF + "=" + locationRef, null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
}

そして、私は自分の活動でそれを次のように呼び出します。

    // Get a Cursor for the list items
    Cursor listComponentCursor = rmDbHelper.fetchComponentsForLocation(locationRef);
    startManagingCursor(listComponentCursor);           

    // set the custom list adapter     
    setListAdapter(new MyListAdapter(this, listComponentCursor)); 

次に、これを ListAdapter で使用して、リスト ビューを埋めます。他のアクティビティで、id (つまり long) に基づいて行をフェッチしている場合、このコードは正常に機能します。String で試してみると、次のエラーが発生します。

Caused by: android.database.sqlite.SQLiteException: **no such column: g:** , while compiling: SELECT DISTINCT _id, run_link, area_link, inspection_link, location_reference, racking_system, component, position, risk, action_required, notes_general, manufacturer, text1, text2, text3, text4, notes_spec FROM location_table WHERE location_reference=g

ご覧のとおり、この場合は String = 'g' ですが、データを見る代わりに 'g' という列を探しているようです!

これが長いのに文字列では機能しない理由が非常に混乱しています。いつものように感謝します。

4

4 に答える 4

3

これであなたのものを変更してください:

String[] columns = {LOCATION_ID, RUN_LINK, AREA_LINK, 
                    INSPECTION_LINK, LOCATION_REF, RACKING_SYSTEM, COMPONENT,
                    POSITION, RISK, ACTION_REQUIRED, NOTES_GENERAL, MANUFACTURER, TEXT1, TEXT2, TEXT3, TEXT4, NOTES_SPEC};
String[] selection = LOCATION_REF + "= ?";

Cursor c = rmDb.query(true, LOCATIONS_TABLE, columns, selection, new String[] {locationRef},
                    null, null, null, null);

placeholdersを使用することをお勧めします。この方法はよりクリーンで、はるかに安全です。

于 2012-10-09T09:54:48.190 に答える
1

LOCATION_REF + "='" + locationRef + "'"クエリ内の文字列が含まれている必要があるため、where は次のようになります。''

于 2012-10-09T09:53:18.047 に答える
1

検索している文字列を一重引用符で囲んでいないと思います。

LOCATION_REF + "='" + locationRef+"'", null,
于 2012-10-09T09:53:26.940 に答える
1

この行を使用してください

rmDb.query(true, LOCATIONS_TABLE, new String[] {
                LOCATION_ID, RUN_LINK, AREA_LINK, INSPECTION_LINK, LOCATION_REF, RACKING_SYSTEM, COMPONENT, POSITION, RISK, ACTION_REQUIRED, NOTES_GENERAL, MANUFACTURER, TEXT1, TEXT2, TEXT3, TEXT4, NOTES_SPEC}, 
                LOCATION_REF + "='" + locationRef+"'", null,
                null, null, null, null);

実際にLOCATION_REFは type の場合、Stringそこにカンマを入れる必要があります。SQLite コンベンション。

于 2012-10-09T09:54:55.503 に答える