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

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

补充:因为是系统数据库迁移遇到的这个问题,原来是Informix的库,informix的驱动没有这个问题。
表结构不能更改。用oracle自己的setFixedChar的话,因为牵涉到的代码较多,暂时不考虑这样更改。
不知道有没有其他的好方法?
1.驱动用的是最新的11的驱动。
2.导表的方式不可取,因为未来新增的数据都是用后端生成,而后端程序在插入数据的时候,会补全空格,即如果字段长度45,实际数据25时,后端程序会插入25位有效数据+20位空格。即使用VARCHAR也会一样。现在后端程序不能动。所以,才有这个问题。
展开
 我来答
老泥娃娃
2012-09-07 · TA获得超过723个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:154万
展开全部
Oracle10g的时候他们的JDBC驱动没办法解决这个问题,现在11G了没有试过你可以换最新版的JDBC驱动的版本试试.

我们以前的解决办法是,你可以把老表A的数据导出来,然后新建一张表B和A表的结构一样,仅仅是把字段f1 改为varchar(20),然后把数据导进来就可以了。这样你的问题就解决了。
最一劳永逸的解决办法就是以后建表就不要用char,用varchar完全可以替代,也不会再出现这个问题。
追问
1.驱动用的是最新的11的驱动。
2.导表的方式不可取,因为未来新增的数据都是用后端生成,而后端程序在插入数据的时候,会补全空格,即如果字段长度45,实际数据25时,后端程序会插入25位有效数据+20位空格。即使用VARCHAR也会一样。现在后端程序不能动。所以,才有这个问题。
zhanglehua338
2012-12-14 · TA获得超过120个赞
知道答主
回答量:43
采纳率:0%
帮助的人:37.1万
展开全部
char型 右边有空格,改为where rtrim(f1)=?,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友495d8a8
2012-09-11 · 超过11用户采纳过TA的回答
知道答主
回答量:75
采纳率:80%
帮助的人:18.6万
展开全部
数据库里的数据使用varchar2类型。看清楚。。。后面有个2
追问
varchar2一样的,后端在插入数据的时候就已经不全空格插入了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式