带占位符的模糊查询、CLOB类型的模糊查询

[color=blue]1.带占位符?的模糊查询:[/color]
比如查询t_name字段中包含变量name的记录:
List<Object> params = new ArrayList<Object>();
params.add("%" + name + "%");
String hql = "select t from Person t where t.t_name like ?";
List<Person> list = service.getPersonByHql(hql,params.toArray());

[color=blue]2.CLOB类型的模糊查询:[/color]
在开发中经常会遇到CLOB类型数据的模糊查询(比如remark的模糊查询等),解决方法如下:
params.add(remarkStr);
String hql = "select t from Person t where dbms_lob.instr(t.remark, ?,1,1)> 0";//只适用于Oracle数据库
补充:Oracle数据库中DBMS_LOB.instr函数用于从指定的位置开始,从clob中查找第N个与模式匹配的字符串;
Oracle数据库中DBMS_LOB.substr函数用于从clob中抽取指定长度的字节,再转为字符串。例子:DBMS_LOB.substr(remark,4000,1)
DBMS_LOB的instr与substr讲解:http://ifindit.blog.sohu.com/163919197.html
http://blog.csdn.net/swordmanwk/article/details/6204611

下面这种方式可以适用于大多数数据库,是首选:
params.add("%" + remarkStr+ "%");
String hql = "select t from Person t where t.remark like ?";//适合大多数数据库,首选方法

[color=blue]3.CLOB类型的精确查询:[/color]
params.add(remarkStr);
//String hql = "select t from Person t where t.remark = ?";//错误!!!切记切记
String hql = "select t from Person t where t.remark like ?";//正确!这里用了点转换:就是灵活运用了like,精确查询时,就让它全部匹配传进来的参数

总结:对于CLOB类型数据的模糊查询以及精确查询都可以用like,只不过是匹配的字符串中的通配符不同而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值