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对象,而不是后补参数空位 。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公贵买其鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值