查找字符串时数据库查询的问题

时间:2012-10-09 09:51:03

标签: android database sqlite

enter code here我正在尝试编写一个查询来提取我的Android SQLite数据库表中位置reference =“a string”的所有行。我在我的数据库助手类中使用以下代码:

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'的列而不是查看数据!

非常困惑为什么这适用于long而不是String。一如既往的帮助。

4 个答案:

答案 0 :(得分: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);

我建议您使用占位符。这种方式更清洁,更安全。

答案 1 :(得分:1)

在哪里应该看起来像LOCATION_REF + "='" + locationRef + "'",因为查询中的字符串应该包含在''

答案 2 :(得分:1)

我认为您在搜索的字符串周围缺少几个单引号:

LOCATION_REF + "='" + locationRef+"'", null,

答案 3 :(得分: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类型,则实际为String,因此您需要在其中添加逗号。 SQLite Convention。