维护一个老项目,最头疼不过
首先是就是数据库插入的问题,想用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
写的都不错
最后问题解决