SQL查询的Andr​​oid - 搜索整个字符串或部分 [英] SQL query in Android - search for whole or part of a string

查看:196
本文介绍了SQL查询的Andr​​oid - 搜索整个字符串或部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我没有经历过的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查询的Andr​​oid - 搜索整个字符串或部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆