SQLite使用模糊查询,sqlite模糊查询
SQLite查询大体可以分两种,一是拼完整语句,二是用封装好的方法用数组传参。 不说废话,先上一段可以用的示例代码(数组传参): String[] selectioinArgs = {"%"+keyword+"%"};//注意:这里没有单引号
String sql = "select "+ TABLE_COLUMN_NAME +"," +TABLE_COLUMN_SYSTEM_NAME+ " from " + TABLE_NAME
+ " where " + TABLE_COLUMN_NAME + " like ? ";
Cursor cursor = db.rawQuery(sql,selectioinArgs); 或者(直接拼完整sql)
String sql2 = "select "+ TABLE_COLUMN_NAME +"," +TABLE_COLUMN_SYSTEM_NAME+ " from " + TABLE_NAME
+ " where " + TABLE_COLUMN_NAME + " like '%"+keyword+"%'";//注意:这里有单引号
Cursor cursor2 = db.rawQuery(sql2,null);第二种因为是直接完整的SQL语句,没太多问题,第一种这里的可能发生的错误有几个: 1. String[] selectionArgs = {"'%"+keyword+"%'"} 这个数组比上面的正确的多了一堆单引号"'",导致的结果是单引号被加入匹配串,实际匹配串成了" like ''%keyword%''",意思为必须包含两边是单引号和中间任意关键字。问题出在多了一对单引号。 2.sql语句后半段:" where " + TABLE_COLUMN_NAME + " like '?' " 这种情况下会报一个异常,大致意思是说“你没说需要参数,可是你又硬给我一个参数,劳资不干了!”。问题就出在问号不应该用单引号包裹。
原因: 我们使用SQLite查询的时候用的"where xxx = ?"来指定条件,我们知道如果"?部分"是String 类型时,是需要单引号引起来的。
经过几个错误的语句可以判断出,"?" 的前后位置必须是空格或者逗号,否则会把?和连着的字符整体当做一个String对象,而不是后补参数空位 。
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。