广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    2018-04-09 07:41:49 次阅读 稿源:互联网
    广告

    由于考虑到数据库的安全性,不被轻易SQL注入,执行查询语句时,一般不使用直接拼接的语句,而是使用参数传递的方法。然后在使用参数传递的方法中时,发现当使用like方式查询数据时,很容易出现一个问题。

    错误案例:

    代码如下:
    String myname = "abc";
    String sql = "select * from mytable where name like '?%'";
    Cursor cursor = db.rawQuery(sql, new String[]{myname};
    运行提示如下错误:
    代码如下:
    java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.

    根据错误提示可知,sql语句中的?号没有被识别出来,从而new String[]{myname}没法替代sql中的?号。?号没有被识别出来的原因估计是?号外有单引号,但是在sql中like语句的值和%号需要用引号围着。

    为了解决sql中?号无法识别,必须去掉?号外的引号,那么%号也需要去掉。所以,得在后面代替?号的参数中添加上%号。

    所以,正确的案例如下:
    代码如下:

    String myname = "abc";
    String sql = "select * from mytable where name like ?";
    Cursor cursor = db.rawQuery(sql, new String[]{myname+"%"};
    可能有人会问为什么不用添加引号,因为参数代替?号时,自动以字符串的形式代替的。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告