由于考虑到数据库的安全性,不被轻易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+"%"};

更多相关文章

  1. Android开发利器之Data Binding Compiler V2,databind和livedata
  2. The application has stopped unexpectedly
  3. Android(安卓)NDK简介
  4. Android(安卓)实现程序完全退出
  5. Android(安卓)String format
  6. Android(安卓)2.3.x WebView中的两个搞笑的bug
  7. Android(安卓)Intent 传递二进制数值的两种方法
  8. Android(安卓)NDK开发(七)——现代化开发方式
  9. Android(安卓)Material Design动画 Animated Vector Drawables|

随机推荐

  1. Android控件属性手册
  2. Android users-permission权限列表
  3. Android之使用ContentResolver对通信录中
  4. Android单例模式
  5. android:repeatCount="infinite"在set中
  6. Android(安卓)Display架构分析--侧重高通
  7. Android--Activity篇之启动模式
  8. android断点下载器案例
  9. [转]Android(安卓)Music和第三方应用
  10. Android之如何解决Android studio运行出