Java超过最大值的异常_java.sql.SQLException: 数据大小超出此类型的最大值

前两天频发遇到这个问题,领导开始让截断字符串后插入,但是终究不是解决之道,后来再遇到,必须要解决了。

环境:oracle:11.2.0.3.0。

驱动:ojdbc14_g.jar

目标表字段类型:CLOB

网上搜了一下,基本上有以下几种方法:

1、使用setCharacterStream()方法,代替setString;

2、使用OCI驱动连接Oracle数据库。

3 驱动的问题,换其他版本的驱动。

4 用setClob的方式。

依次尝试:

1 换成setCharacterStream()方法,依然报错。

2 没有考虑这种解决方法,因为OCI驱动要求机器上装有oracle客户端。因为程序肯定要其他机器上运行,就算这种方法能解决,也米有意思。

3 驱动换成ojdbc14-10.2.0.3.0.jar,依然报错,没有继续尝试。

4 解决,具体代码如下,基本上是先插入一个空的CLOB,然后再更新。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public boolean saveCPBaseResultJSON(String json) throwsSQLException {

String sql= "INSERT INTO REPORT_CP_BASE(id,NORM_TIME,JSON) VALUES(SQ_REPORT_CP_BASE.NEXTVAL,sysdate,?)";

PreparedStatement prest=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

prest.setClob(1, CLOB.empty_lob());

prest.execute();

conn.commit();

prest.close();//获取最大ID

String csql = "select max(id) as max from REPORT_CP_BASE";

Statement stm=conn.createStatement();

ResultSet rs=stm.executeQuery(csql);int max=0;while(rs.next()) {

max=rs.getInt("max");

}try{

UpdateClob(max,json);

}catch(Exception e)

{

e.printStackTrace();return false;

}return true;

}private void UpdateClob(int id,String bigstr) throwsSQLException, IOException {

String sql= "select json from REPORT_CP_BASE where id ="+id+" for update";

Statement stm=conn.createStatement();

conn.setAutoCommit(false);

ResultSet rs=stm.executeQuery(sql);

CLOB clob=null;while(rs.next()) {

clob= (CLOB)rs.getClob(1);

}

Writer writer=clob.getCharacterOutputStream();

writer.write(bigstr);

writer.flush();

writer.close();

conn.commit();

}

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值