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