关于Room数据库,拼写模糊查找语句遇到的问题

栏目: 数据库 · 发布时间: 5年前

内容简介:最近帮公司做了一个工具类的app,类似于本地字典查询的那种,所以肯定要涉及到数据保存到本地,就尝试用了一下Google自己的架构中的数据库框架Room。配置和使用还是比较简单,没用过得可以看官方文档,上手还是比较容易的。还有这里是Google官方的代码库正经的当然就是遇到的坑啊!本来一切增删改查都进行的很顺利,然后项目中有一个搜索的功能,既然是搜索当然是模糊查找了啦。例如查找user表中name包含某字符串的所有用户,一般sql语句是这样在Android端里面一般用的数据库都是注解@query,后面拼上需

最近帮公司做了一个 工具 类的app,类似于本地字典查询的那种,所以肯定要涉及到数据保存到本地,就尝试用了一下Google自己的架构中的数据库框架Room。配置和使用还是比较简单,没用过得可以看官方文档,上手还是比较容易的。还有这里是Google官方的代码库  Android Room with a View (你已经是一个成熟的程序猿了,梯子需要自己带了),一步步教你怎么写,非常清晰,所以具体使用就不多说了。

说正经的

正经的当然就是遇到的坑啊!本来一切增删改查都进行的很顺利,然后项目中有一个搜索的功能,既然是搜索当然是模糊查找了啦。例如查找user表中name包含某字符串的所有用户,一般 sql 语句是这样

Select * From tb_user Where Name Like %name%
复制代码

在Android端里面一般用的数据库都是注解@query,后面拼上需要查询的语句,当然每个数据库框架要求的格式可能不一样,但是最终编译成的最终语句肯定是上面那种格式的。然后我就看了下官方文档上面给出的例子,代码是这样的,注意红框里面的代码

关于Room数据库,拼写模糊查找语句遇到的问题

一看,不错,有like语句的例子,但是这个例子不是模糊查找啊!那行吧,照葫芦画瓢吧。假如不是模糊查找,在Room的Dao里面应该这么写

@Query("SELECT * FROM tb_use WHERE Name LIKE :name")
复制代码

基本上和那个sql语句差不多,就是name前面多了一个冒号。下面开始我们模糊查询语句该怎么写了,我第一想到的就是这么写

@Query("SELECT * FROM tb_use WHERE Name LIKE '%' + :name" + '%')
复制代码

这不是拼接两端语句常用的嘛,就+拼接一下就OK啦。嗯,也没报错,心想估计对了,运行一下,搜索测试一下,我擦,没有效果,这是什么鬼。难道这不是模糊搜索吗?还是我拼接的不对。

我就尝试各种拼接啊,转义啊,想把那个**%**给它弄进去啊。但是天不遂人愿啊,各种报错,报红线,这里不得不说一个Room的一个好处,就是你在写sql语句的时候它会检查,格式不对,里面会报红线。

尝试了很长时间,还是没有尝试对,就开始看Google的文档啊,没找到关于模糊查找该怎么写的,再继续百度各种博客,看看有没有同病相怜的猿猿,不但没找到解决办法,还看到有几篇博客说Room可能不支持模糊查找(可能博主也没试出来)。我擦类,不会真不支持吧,那样我可能就要换框架了啊。但是,我心想Google不可能犯这么低级的错误啊!然后我又跑去各大程序猿吹水群询问各位大佬。

果然,皇天不负有心人,最终经一个群里大佬提醒以及在Stack Overflow上面搜了一下,找到了最终答案,应该是这样的

@Query("SELECT * FROM tb_use WHERE Name LIKE '%' || :name" || '%')
复制代码

原来是用双竖杠去拼接,而不是加号,欲哭无泪啊。然后我就去搜了一下sql语句拼接,找到这样一段话

在SQL中的SELECT语句中,可使用一个特殊的操作符来拼接两个列。根据你所使用的DBMS,此操作符可用加号(+)或两个竖杠(||)表示。在 MySQL 和MariaDB中,必须使用特殊的函数。 说明:是+还是||? Access和SQL Server使用+号。DB2、Oracle、PostgreSQL、 SQLite 和Open Office Base使用||。详细请参阅具体的DBMS文档。 看来SQL的知识点也要懂点啊!

再来看看Stack Overflow上面大神给的解释

关于Room数据库,拼写模糊查找语句遇到的问题

两种做法,一种就是我上面用双竖杠拼接的,还有一种就是在传参的时候,把%%给拼接好,这种方式我也是测试了一下,也是可以的,因为最终都是转换成sql的标准查询语句。

结尾

经过一系列努力,还是找到了解决方案,这次应该是Google坑了吧:joy::joy::joy:,文档上没写啊(难道写了,我没找到?哪位大兄弟找到告知我一声)。虽然花了点时间,不过过程中还是学到一些东西的哈。这算使用Room中遇到的小坑吧,看了很多博客都没有提到这点,所以在此记录一些,希望能帮到后续使用Room框架的朋友。最后说一句,Stack Overflow真是个好东西,嘻嘻:laughing::laughing::laughing:。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Google's PageRank and Beyond

Google's PageRank and Beyond

Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50

Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具