解决oracle数据库中ps.setString()失效的问题

来源:互联网 发布:蜂蜜源码 编辑:程序博客网 时间:2024/06/05 03:16
oracle数据库中的ps.setString()失效的问题
首先,不得不说,这是oracle数据库的一个巨坑。
它是oracle中定义的char类型的字段造成的,在oracle中,char表示定长的字符串,
当字符串长度不够时,数据库会自动用空格补全到指定长度。
然后当你进行数据库语句的操作时,
就会出现这样的现象:当进行不带占位符的语句的操作时,可以操作成功;
eg:select * from t_uer where id='1001';(oracle数据库中id为char(5)类型)
但是,当进行带有占位符的语句的操作时,数据库操作不成功,但又不会报错。
eg:select * from t_user where id=? ;
ps.setString(1,id);
这是因为在oracles数据库中,char类型的特性决定的,当字符不够指定长度时,会用空格进行占位
从而造成错误。
解决:
1.使用select * from t_user where trim(id)=?;的形式进行操作。trim表示去掉前后空格
2.使用select id from a where id=rpad(?,10)的形式。
3.使用ps.setString(1,cast(id,char(7))); 

即使使用了这三个正确的SQL,也会带来性能问题。
因为第一个SQL不会利用正常创建的索引,而且在复杂的查询下,更容易出错。
所以应尽量避免使用Oracle的char类型,即使只有一个字节,也应该使用varchar2类型
0 0
原创粉丝点击