求助各位大神,关于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也会一样。现在后端程序不能动。所以,才有这个问题。 展开
利用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也会一样。现在后端程序不能动。所以,才有这个问题。 展开
3个回答
展开全部
Oracle10g的时候他们的JDBC驱动没办法解决这个问题,现在11G了没有试过你可以换最新版的JDBC驱动的版本试试.
我们以前的解决办法是,你可以把老表A的数据导出来,然后新建一张表B和A表的结构一样,仅仅是把字段f1 改为varchar(20),然后把数据导进来就可以了。这样你的问题就解决了。
最一劳永逸的解决办法就是以后建表就不要用char,用varchar完全可以替代,也不会再出现这个问题。
我们以前的解决办法是,你可以把老表A的数据导出来,然后新建一张表B和A表的结构一样,仅仅是把字段f1 改为varchar(20),然后把数据导进来就可以了。这样你的问题就解决了。
最一劳永逸的解决办法就是以后建表就不要用char,用varchar完全可以替代,也不会再出现这个问题。
追问
1.驱动用的是最新的11的驱动。
2.导表的方式不可取,因为未来新增的数据都是用后端生成,而后端程序在插入数据的时候,会补全空格,即如果字段长度45,实际数据25时,后端程序会插入25位有效数据+20位空格。即使用VARCHAR也会一样。现在后端程序不能动。所以,才有这个问题。
展开全部
char型 右边有空格,改为where rtrim(f1)=?,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据库里的数据使用varchar2类型。看清楚。。。后面有个2
追问
varchar2一样的,后端在插入数据的时候就已经不全空格插入了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询