zoukankan      html  css  js  c++  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,然后再更新。

    public boolean saveCPBaseResultJSON(String json) throws SQLException {
            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) throws SQLException, 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
  • 相关阅读:
    spark-2.0.0与hive-1.2.1整合
    kafka_2.11-0.10.0.0安装步骤
    hive-1.2.1安装步骤
    linux时间编程
    gdb与coredump
    linux下静态库、动态库的创建与使用
    linux常用工具
    js数组、内置对象、自定义对象
    JS学习五(js中的事件)
    JS学习四(BOM DOM)
  • 原文地址:https://www.cnblogs.com/lxlck/p/3483606.html
Copyright © 2011-2022 走看看