当前位置:   article > 正文

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

pstatement.setstring为空
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类型
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/141623
推荐阅读
相关标签
  

闽ICP备14008679号