当前位置:编程学习 > JAVA >>

求助各位大神,关于ORACLE JDBC驱动的PreparedStatement setString方法处理char字段的问题

数据库为oracle,某张表的字段为f1 char(20),插入的数据为'abcd',这样数据库中实际存储的值应该是'abcd+16个空格'。 
 利用weblogic配置的ORACLE JDBC数据源连接查询数据库,使用一般的statement的话, where f1='abcd'可以查询出来数据;使用PreparedStatement,where f1=?, 然后利用setString(1,'abcd'),无法查询到数据。
有没有什么办法可以解决这个问题?

补充:因为是系统数据库迁移遇到的这个问题,原来是Informix的库,informix的驱动没有这个问题。
表结构不能更改。用oracle自己的setFixedChar的话,因为牵涉到的代码较多,暂时不考虑这样更改。
不知道有没有其他的好方法? --------------------编程问答-------------------- 把sql语句改了

where trim(f1) = ? --------------------编程问答-------------------- 这样就会牵涉到大量的代码修改,而且trim的话会影响到性能,因为索引就失效了。
引用 1 楼  的回复:
把sql语句改了

where trim(f1) = ?
--------------------编程问答--------------------
引用 2 楼  的回复:
这样就会牵涉到大量的代码修改,而且trim的话会影响到性能,因为索引就失效了。
引用 1 楼  的回复:
把sql语句改了

where trim(f1) = ?


那就想不到办法了

要么改 数据库char 为 varchar //估计不太现实

不用trim 又不改数据库 大量代码修改是不可避免的

坐等高手支招吧 --------------------编程问答-------------------- where f1 like 'abcd%' --------------------编程问答-------------------- 先判断串儿的长度,然后补全空格 --------------------编程问答-------------------- 有没有高手有其它的解决方案呢? --------------------编程问答-------------------- 用Like或者trim都会影响到性能,而且涉及改动相当多的代码。另外补充下:
1.驱动用的是最新的11的驱动。
2.导表的方式不可取,因为未来新增的数据都是用后端生成,而后端程序在插入数据的时候,会补全空格,即如果字段长度45,实际数据25时,后端程序会插入25位有效数据+20位空格。即使用VARCHAR也会一样。现在后端程序不能动。所以,才有这个问题。
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,