Java 保存带Clob字段的数据

几年前的代码,做一下记录

/**
     * <将前段传入的string对象转换为Clob对象>
     *@author liuzhu 
     *@param str
     *@return
     */
    private Clob stringToClob(String str) {
        if (null == str)
         return null;
        else {
            try {
                 java.sql.Clob c = new javax.sql.rowset.serial.SerialClob(str
                         .toCharArray());
                 return c;
             } catch (Exception e) {
                 return null;
            }
        }
    }

 

public long saveCheckerTrainHistory(final CheckerTrainHistoryVO vo,final String trainingSummary)
    {
        long retVal = (Long)getZormTemplate().execute(new ZormCallback()
        {
            @Override
            public Long doInZorm(Session session) throws ZormException, SQLException
            {
                
                session.beginTransaction();
                Connection conn = session.connection();
                StringBuffer sql = new StringBuffer();
                sql.append(" INSERT INTO CHECKER_TRAINING_HISTORY ( ");         
                sql.append(" oid, store_id,checkerid,training_theme, ");    
                sql.append(" training_employees, training_summary, ");    
                sql.append(" training_date,created_by, created_time,  ");    
                sql.append(" last_updated_by,last_updated_time )  ");    
                sql.append(" values(?,?,?,?,?,empty_clob(),?,?,?,?,?)");
                //先插入一个空的Clob数据


                PreparedStatement ps = null;
                ResultSet rst = null;
                
                try
                {
                    CLOB clob=null; 
                    long rowNum = 0;
                    //禁用自动提交事务  
                    conn.setAutoCommit(false);  
                    String seqSql = "select checker_training_history_s.nextval from dual";
                    ps=conn.prepareStatement(seqSql.toString());  
                    rst = ps.executeQuery();
                    if(rst.next()){
                        rowNum = rst.getLong(1);
                    }
                    ps.close(); 
                    
                    ps=conn.prepareStatement(sql.toString());
                    ps.setLong(1, rowNum);
                    ps.setLong(2, vo.getStoreId());
                    ps.setLong(3, vo.getCheckerId());
                    ps.setString(4, vo.getTrainingTheme());
                    ps.setLong(5, vo.getTrainingEmployees());
                    ps.setDate(6, new java.sql.Date(vo.getTrainingDate().getTime()));
                    ps.setLong(7, vo.getCreatedBy());
                    ps.setDate(8, new java.sql.Date(vo.getTrainingDate().getTime()));
                    ps.setLong(9, vo.getLastUpdatedBy());
                    ps.setDate(10, new java.sql.Date(vo.getTrainingDate().getTime()));
                    ps.executeUpdate();  
                    ps.close();  

                    //查询并获得这个cursor,并且加锁  
                    String sql2=" select training_summary from checker_training_history where oid=? for update";  
                    ps=conn.prepareStatement(sql2);  
                    ps.setLong(1, rowNum);  
                    rst = ps.executeQuery();  
                    if(rst.next()){  
                        clob=(CLOB)rst.getClob(1);  
                    }  
                    /* 向CLOB对象中写入数据 */  
                    BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());  
                    
                    out.write(trainingSummary);  
                    //一定要flush(),否则不会将String对象写入到Clob当中去。。。  
                    out.flush();  
                    out.close();  
                    ps.close();  
                      
                    //更新clob对象  
                    String sql3="update checker_training_history set training_summary =? where oid=?";  
                    ps=conn.prepareStatement(sql3);  
                    ps.setClob(1, clob);  
                    ps.setLong(2, rowNum);  
                    ps.executeUpdate();  
                    ps.close();  
                    conn.commit();  
                    conn.setAutoCommit(true);  
                    return rowNum;
                }
                catch (SQLException|IOException e)
                {
                    e.printStackTrace();
                }                 
                finally
                {
                    try
                    {
                        if(ps!=null)
                        {
                            ps.close();
                        }
                        if(rst != null)
                        {
                            rst.close();
                        }
                        if(conn != null)
                        {
                            conn.close();
                        }
                    }
                    catch (SQLException e)
                    {
                        e.printStackTrace();
                    }
                }
                session.clear();
                return 0L;
            }
        });
        
        return retVal;
    }

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值