关于hql语句设置参数,数据库字段为char类型的问题
今天做一个例子,出现了这样的情况,数据库有一个字段:busiType char(2)类型
查询的代码如下:
Java code
String hql = "select count(*) from BZJ_BUSIACC a inner join a.BZJZTB d join a.BUSITB c where c.BUSI_TYPE=:busiType ";
Query query = session.createQuery(hql).setParameter("busiType", "2");
这样查询出来是查不出结果的,在网上找了一下,也没找到答案,突然发现数据库定义的长度是char(2)是定长,而里面的值是2,只有1个长度,所以查不出来,后来我把输入的参数"2"改成"2 ",也就是2后面加一个空格,果不其然就能查出来了,看样子还是数据库设计的有问题。
------解决方案-------------------- 你的sql语句有问题,内连接查询不是你这样用得;你最好看看左、右、内连接的使用方法。
------解决方案-------------------- char跟varchar是有很大区别的!!!
用char呢、如果你定义的长度是2那么你保存的时候、存的是"2"
但是入库后呢、数据库会自动用空格填充、让它满足Length!如果超出肯定会报错的!
也就是"2 "!
当你去查询的时候、select * from Table WHERE 字段="2"!
这样很明显! "2 "跟"2"是不会相等的嘛!!!
如果你用的是varchar的话、他不管你存储的字符的长度是否满足!
它不会给你填充了!
------解决方案-------------------- 探讨 char跟varchar是有很大区别的!!! 用char呢、如果你定义的长度是2那么你保存的时候、存的是"2" 但是入库后呢、数据库会自动用空格填充、让它满足Length!如果超出肯定会报错的! 也就是"2 "! 当你去查询的时候、select * from Table WHERE 字段="2"! 这样很明显! "2 "跟"2"是不会相等的嘛!!! 如果你用的是varchar的话……