Android 查找字符串时数据库查询出现问题

Android 查找字符串时数据库查询出现问题,android,database,sqlite,Android,Database,Sqlite,在此处输入code我正在尝试编写一个查询,以提取我的Android SQLite数据库表中的所有行,其中location reference=“a string”。我在数据库助手类中使用以下代码: public Cursor fetchComponentsForLocation(String locationRef) { Cursor mCursor = rmDb.query(true, LOCATIONS_TABLE, new String[] {

在此处输入code
我正在尝试编写一个查询,以提取我的Android SQLite数据库表中的所有行,其中location 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)获取行时,这段代码可以正常工作。当我尝试使用字符串时,会出现以下错误:

原因:android.database.sqlite.SQLiteException:*无此列:g:*,编译时:选择不同的id、运行链接、区域链接、检查链接、位置参考、货架系统、组件、位置、风险、所需操作、注释、一般、制造商、text1、text2、text3、text4、,注释来自位置表,位置参考=g

如您所见,在本例中,字符串='g',但它似乎在查找名为'g'的列,而不是查找数据


我很不明白为什么这适用于长字符串而不是字符串。感谢您一如既往的帮助。

where应该看起来像
LOCATION\u REF+“=”+locationRef+“
,因为查询中的字符串应该包含在

where应该看起来像
LOCATION\u REF+“=”+locationRef+“”
由于查询中的字符串应包含在
''

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

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

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

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

用以下内容更改您的:

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);

我建议您使用占位符。这条路更干净、更安全。

用这条路换你的:

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);
我建议您使用占位符。这样更干净、更安全。

使用这条线

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\u REF
如果类型为
String
,则需要在那里添加逗号。SQLite约定。

使用此行

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\u REF
如果类型为
String
,则需要在那里添加逗号。SQLite大会。

太棒了-感谢您的帮助。当你知道的时候很明显!!:)太棒了-谢谢你的帮助。当你知道的时候很明显!!:)谢谢你的回复。非常感谢。谢谢您的回复。非常感谢。谢谢您的回复。非常感谢。谢谢您的回复。非常感谢。谢谢你欺骗-我会检查我的代码,并在必要时修改。谢谢。谢谢你欺骗者-我会检查我的代码,并在必要时修改。谢谢