Derby用户名密码后续

Joy 分类:好好学习 | Joy 标签: Joy 发表于2010/04/28,20:46 | 14条评论

前几天我写了一篇:为Derby设置用户名和密码,但是没有考虑周全。现在我再整理一下,发布完整教程。 继续阅读 »

解决Derby默认大小写敏感的问题

Joy 分类:好好学习 | Joy 标签: Joy 发表于2010/03/17,15:26 | 3条评论

Derby的column值默认是大小写敏感的,查询的时候必须注意这个问题。

但是在客户端传过来的数据可能是千奇百怪的,如果数据库里存的是”Name”,传过来的是“name”就会查不到,但是不能要求客户端那么严格,一般来说,Name和name是一样的。

昨天,我研究了一下,找到一种非常麻烦的解决方法,那就是在创建表的时候加一个column,此column的值引用自某一个column,并且自动转为全大写或全小写,sql 语句如下:

CREATE TABLE employee
  1. (
  2. employeeID               int,
  3. name                        varchar( 50 ),
  4. caseInsensitiveName   GENERATED ALWAYS AS( UPPER( name ) )
  5. )
  6. ;

然后,在POJO类要增加一个attribute来对应这个column,当然了,在映射文件同样要加相应的property。

在然后,在需要查询employee的name时,将客户端传入的值先转为大写,注意,这时就不能去查询name这个column了,要查询caseInsensitiveName 。

瞧瞧,是不是很复杂啊。所以,我不推荐用这个方法。

今天我找到一种更简单的方法,废话少说,开始。

其实,在Derby中,支持这样的写法:

select * from employee where upper(name) =’WANG LIHONG’;

所以,我们不需要增加column,也不需要去改POJO和映射文件,只需要在查询时先把客户端传来的值变成大写,再用以下语句查询就好。

如果用HQL(最好用占位符,不要像我这样写,我这里举例就随便一点了):
” from Employee where upper(name)=”+”‘”+upperCname+”‘”;
如果用Criteria,需要用sqlRestriction()方法:
.add(Restrictions.sqlRestriction(“upper(cname)=?”,upperCname,Hibernate.STRING));