SQL查询的Android - 搜索整个字符串或部分 [英] SQL query in Android - search for whole or part of a string
问题描述
我没有经历过的SQL查询太多了,所以我有在寻找解决我的问题有些麻烦。
我有书签列表,例如:Facebook的,开发者控制台,堆栈溢出... 我也有自己的URL列表: http://m.facebook.com ,的 https://market.android.com ...
我试图让用户搜索这些2列出并显示任何类似的结果,例如 - 如果用户搜索面子 - 我希望他能得到脸谱。 如果用户搜索市场(为market.android .. URL),他会得到开发者控制台。
这是我的SQL WHERE子句:
字符串,其中= Browser.BookmarkColumns.TITLE +怎么样?OR
+ Browser.BookmarkColumns.URL +怎么样?;
其中=(+,其中+)和+ Browser.BookmarkColumns.BOOKMARK +== 1;
它工作正常,但只找到完整的字符串(例如:找脸谱,我必须寻找脸谱或脸谱)
。也许需要一些帮助的!
谢谢, 利奥尔
更新:
相关code:
//搜索
的String [] selArgs =新的String [] {查询};
字符串,其中= Browser.BookmarkColumns.TITLE +LIKE'%+查询+%或
+ Browser.BookmarkColumns.URL +LIKE'%+查询+%';
其中=(+,其中+)和+ Browser.BookmarkColumns.BOOKMARK +== 1;
CUR = managedQuery(BOOKMARKS_URI,投影,
在这里,空,Browser.BookmarkColumns.VISITS +降序);
logcat的堆栈跟踪:
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):致命异常:主要
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):java.lang.RuntimeException的:无法启动的活动ComponentInfo {PACKAGE}:android.database.sqlite.SQLiteException:无法识别标记:'%脸%)和书签== 1)ORDER BY访问DESC:在编制:选择_id,标题,URL,访问,图标,缩略图,touch_icon,_id AS _id从书签WHERE((标题LIKE'%脸%或URL LIKE'%脸%)和书签== 1)ORDER BY访问降序
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:939)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.os.Handler.dispatchMessage(Handler.java:99)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.os.Looper.loop(Looper.java:130)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread.main(ActivityThread.java:3835)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在java.lang.reflect.Method.invokeNative(本机方法)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在java.lang.reflect.Method.invoke(Method.java:507)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:847)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在dalvik.system.NativeStart.main(本机方法)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):由:android.database.sqlite.SQLiteException:无法识别标记:'%脸%)和书签== 1)ORDER BY访问DESC:,而编译:选择_id,标题,URL,访问,图标,缩略图,touch_icon,_id AS _id从书签WHERE((标题LIKE'%脸%或URL LIKE'%脸%)和书签== 1)ORDER BY访问降序
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.content.ContentResolver.query(ContentResolver.java:271)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.Activity.managedQuery(Activity.java:1550)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在PACKAGE.doMySearch(APPNAME.java:725)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在PACKAGE.onCreate(APPNAME.java:150)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-23 00:09:59.765:ERROR / AndroidRuntime(15101):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
您可以试试这个:
字符串,其中= Browser.BookmarkColumns.TITLE +LIKE'%+ X +%或
+ Browser.BookmarkColumns.URL +LIKE'%+ X +%';
其中=(+,其中+)和+ Browser.BookmarkColumns.BOOKMARK +== 1;
其中x是文本用户已经插入,即脸
希望这有助于!
I'm not experienced with SQL queries too much so I'm having some trouble in finding the solution to my problem.
I have a list of Bookmarks, for example: Facebook, Developers Console, Stack Overflow... and I also have a list of their URLs: http://m.facebook.com, https://market.android.com...
I'm trying to let the user search these 2 lists and show any similar result, for example - if the user searched for "face" - I want him to get "Facebook". And if the user searched for "market" (for the market.android.. URL), he'll get "Developers Console".
This is my SQL WHERE clause:
String where = Browser.BookmarkColumns.TITLE + " LIKE ? OR "
+ Browser.BookmarkColumns.URL + " LIKE ?";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
It works fine but it only finds complete strings (for example: to find "Facebook", I must search for "Facebook" OR "facebook").
Would love some help with that!
Thanks, Lior
UPDATE:
Relevant code:
//search
String[] selArgs = new String[] { query };
String where = Browser.BookmarkColumns.TITLE + " LIKE '%" + query + "%' OR "
+ Browser.BookmarkColumns.URL + " LIKE '%" + query + "%'";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
cur = managedQuery(BOOKMARKS_URI, projection,
where, null, Browser.BookmarkColumns.VISITS + " DESC");
Logcat stacktrace:
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): FATAL EXCEPTION: main
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): java.lang.RuntimeException: Unable to start activity ComponentInfo{PACKAGE}: android.database.sqlite.SQLiteException: unrecognized token: "'%face%) AND bookmark == 1) ORDER BY visits DESC": , while compiling: SELECT _id, title, url, visits, favicon, thumbnail, touch_icon, _id AS _id FROM bookmarks WHERE ((title LIKE '%face%' OR url LIKE '%face%) AND bookmark == 1) ORDER BY visits DESC
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.os.Looper.loop(Looper.java:130)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.main(ActivityThread.java:3835)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at java.lang.reflect.Method.invoke(Method.java:507)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at dalvik.system.NativeStart.main(Native Method)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): Caused by: android.database.sqlite.SQLiteException: unrecognized token: "'%face%) AND bookmark == 1) ORDER BY visits DESC": , while compiling: SELECT _id, title, url, visits, favicon, thumbnail, touch_icon, _id AS _id FROM bookmarks WHERE ((title LIKE '%face%' OR url LIKE '%face%) AND bookmark == 1) ORDER BY visits DESC
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.content.ContentResolver.query(ContentResolver.java:271)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.Activity.managedQuery(Activity.java:1550)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at PACKAGE.doMySearch(APPNAME.java:725)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at PACKAGE.onCreate(APPNAME.java:150)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-23 00:09:59.765: ERROR/AndroidRuntime(15101): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
You can try this:
String where = Browser.BookmarkColumns.TITLE + " LIKE '%" + x +"%' OR "
+ Browser.BookmarkColumns.URL + " LIKE '%" + x +"%'";
where = "(" + where + ") AND " + Browser.BookmarkColumns.BOOKMARK + " == 1";
where x is the text that user has inserted, i.e. face.
Hope this helps!
这篇关于SQL查询的Android - 搜索整个字符串或部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!