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)));