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

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

补充:因为是系统数据库迁移遇到的这个问题,原来是Informix的库,informix的驱动没有这个问题。
表结构不能更改。用oracle自己的setFixedChar的话,因为牵涉到的代码较多,暂时不考虑这样更改。
不知道有没有其他的好方法?
...全文
330 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
renlujing 2012-09-09
  • 打赏
  • 举报
回复
用Like或者trim都会影响到性能,而且涉及改动相当多的代码。另外补充下:
1.驱动用的是最新的11的驱动。
2.导表的方式不可取,因为未来新增的数据都是用后端生成,而后端程序在插入数据的时候,会补全空格,即如果字段长度45,实际数据25时,后端程序会插入25位有效数据+20位空格。即使用VARCHAR也会一样。现在后端程序不能动。所以,才有这个问题。
renlujing 2012-09-09
  • 打赏
  • 举报
回复
有没有高手有其它的解决方案呢?
haorengoodman 2012-09-09
  • 打赏
  • 举报
回复
先判断串儿的长度,然后补全空格
gcaling2006 2012-09-09
  • 打赏
  • 举报
回复
where f1 like 'abcd%'
cscript 2012-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这样就会牵涉到大量的代码修改,而且trim的话会影响到性能,因为索引就失效了。
引用 1 楼 的回复:
把sql语句改了

where trim(f1) = ?
[/Quote]

那就想不到办法了

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

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

坐等高手支招吧
renlujing 2012-09-07
  • 打赏
  • 举报
回复
这样就会牵涉到大量的代码修改,而且trim的话会影响到性能,因为索引就失效了。
[Quote=引用 1 楼 的回复:]
把sql语句改了

where trim(f1) = ?
[/Quote]
cscript 2012-09-07
  • 打赏
  • 举报
回复
把sql语句改了

where trim(f1) = ?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧