关于PreparedStatement及相关的问题ojdbc等问题

维护一个老项目,最头疼不过

首先是就是数据库插入的问题,想用varchar2(4000)放不下,只能用clob了

 

之前是直接写sql语句就行了,现在决定用问号传参数的方法,用PreparedStatement处理

 

那么过去有三个字段是ad_x,ad_y,ad_z,都是varchar2(4000)的,现在用PreparedStatement的setString就会报错,上网看了看要用setCharacterStream,于是悲剧就开始了,由于我用到的是jdk1.6,那么相关的方法有:

setCharacterStream(int parameterIndex, Reader reader)
setCharacterStream(int
parameterIndex, Reader reader, long length)

注意:这两个方法是不能用的,这两个方法只有在jdbc4.0中才支持

只有setCharacterStream(int parameterIndex, Reader reader, int length)方法才能用

否则就是报错:Exception in thread "Thread_DataProcessor" java.lang.AbstractMethodError: oracle.jdbc.driver.OraclePreparedStatement.setCharacterStream(ILjava/io/Reader;)V

你是可以编译,因为你的jdk是1.6的,但是是ojdbc14.jar

查一下就知道

ojdbc14.jar     适用于JDK 1.4 

ojdbc5.jar:   适用于jdk5

ojdbc6.jar:   适用于jdk6

并且只用ojdbc6.jar支持jdbc4.0,以后要是自己弄个什么也是尽量选择oracle11和ojdbc6.jar

 

相关参考的帖子有:

http://www.blogjava.net/landor2004/archive/2009/07/03/285361.html

http://blog.163.com/jekyll_zhou@126/blog/static/1820473820123206189381/

 

但是接下来的问题我始终认为是我自己把顺序弄错了

因为是原来的插入值为ad_x,ad_y,ad_z,但是用setCharacterStream方法后,顺序就错乱了,于是我很仔细很认真的查看了是不是弄错了,debug一行一行的看,还是错乱的

,数据库变成了y、z、x,然后我就看到了这个帖子:

http://www.itpub.net/thread-371332-1-1.html

这样心里上得到了佐证,然后就错乱写了,最后也只能这样了

 

接下来是clob的存储,存储g_x,g_y,g_z,然后又报错,md又报错!!!

总之试了各种方法就是setClob不行,用oracle.sql.CLOB也不行,还有这样的报错

ORA-03120: 双工转换例行程序: 整数溢出

或者setCharacterStream报错

java.sql.SQLException: ORA-01460: 转换请求无法实现或不合理

 

原来什么 clob、blob之类的字段无法直接存储,要先存储再for update,崩溃啊,继续查查:

http://blog.csdn.net/xph4444/article/details/5050473

http://blog.csdn.net/shazhenzhong/article/details/1925199

写的都不错

最后问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值