java读写oracle Clob数据

代码
package com.jstrd.common;

import java.io.BufferedReader;
import java.io.StringWriter;
import java.io.Writer;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.sql.CLOB;

import com.exp.dao.DBConnection;
import com.exp.dao.ormapping.BizDataAdapter;
import com.exp.fcl.vo.CommonVO;

/**
 * <p>
 * Description: Oracle CBlob读取
 * </p>
 * <p>
 * Project: 江苏供应链系统
 * </p>
 * <p>
 * Copyright: Copyright (c) jstrd 2004-2009
 * </p>
 * <p>
 * Company: 中博信息技术研究院有限公司
 * </p>
 * <p>
 * DateTime: 2010.02.03 16:25
 * </p>
 * 
 * 
@author dingzh
 * 
@version 1.0.0.0
 
*/
public class ReadClobCommon {
    
    
/**
     * 获取Clob
     * 
@param dbConn
     * 
@param sql
     * 
@param fieldName
     * 
@return
     
*/
    
public String getClob(DBConnection dbConn, String sql, String fieldName) {
        String ret 
= "";
        PreparedStatement pstmt 
= null;
        ResultSet rs 
= null;
        
try {
            
//java.sql.*
            Connection conn = dbConn.getConnection();
            pstmt 
= conn.prepareStatement(sql);
            rs 
= pstmt.executeQuery();
            Clob clob 
= null;
            
if (rs.next()) {
                clob 
= rs.getClob(fieldName);
                BufferedReader in 
= new BufferedReader(clob.getCharacterStream());
                StringWriter out 
= new StringWriter();
                
int c;
                
while((c=in.read()) !=-1){
                    out.write(c);
                }
                ret 
= out.toString().trim();
                out.close();
                in.close();
            }
        } 
catch(SQLException es) {
            es.printStackTrace();
            ret 
= "";
        } 
catch(Exception e) {
            e.printStackTrace();
            ret 
= "";
        } 
finally {
            
try {
                
if(null != rs) {
                    rs.close();
                }
                
if(null != pstmt) {
                    pstmt.close();
                }
            } 
catch (SQLException e) {}
        }
        
return ret;
    }
    
    
/**
     * 插入Clob
     * 
@param dbConn
     * 
@param table
     * 
@param idField
     * 
@param fieldName
     * 
@param id
     * 
@param content
     * 
@param bApeand
     * 
@return
     
*/
    
public int setClob(DBConnection dbConn, String table, String idField, String fieldName, 
            String id, String content, 
boolean bApeand) {
        
int ret = -1;
        PreparedStatement pstmt 
= null;
        ResultSet rs 
= null;
        
try {
            
//java.sql.*
            Connection conn = dbConn.getConnection();
            String sql 
= "select "+fieldName+" from "+table+" where "+idField+"="+id+" for update";
            pstmt 
= conn.prepareStatement(sql);
            rs 
= pstmt.executeQuery();
            CLOB clob 
= null;
            
if (rs.next()) {
                
//获取clob对象,此处的clob是oracle.sql.Clob   
                clob = (CLOB)rs.getClob(fieldName);
                
//执行更新操作   
                long pos = clob.length();
                Writer wr 
= clob.setCharacterStream(pos); //clob.getCharacterOutputStream();
                if(bApeand) {
                    wr.append(content);
                } 
else {
                    wr.write(content);
                }
                wr.flush();
                wr.close();
//                //
                ret = 1;
            }
        } 
catch(SQLException es) {
            es.printStackTrace();
            ret 
= -1;
        } 
catch(Exception e) {
            e.printStackTrace();
            ret 
= -1;
        } 
finally {
            
try {
                
if(null != rs) {
                    rs.close();
                }
                
if(null != pstmt) {
                    pstmt.close();
                }
            } 
catch (SQLException e) {}
        }
        
return ret;
    }
    
    
/**
     * 获取IntfXml
     * 
@param dbConn
     * 
@param ifId
     * 
@return
     
*/
    
public String getIntfXml(DBConnection dbConn, int ifId) {
        String ret 
= "";
        BizDataAdapter dataAdapter 
= null;
        
try {
            CommonVO paramsVO 
= new CommonVO();
            paramsVO.setInteger(
"if_id", ifId);
            dataAdapter 
= new BizDataAdapter(dbConn);
            String sql 
= dataAdapter.getSql("[gyl.interface.log.getXmlInfo]", paramsVO);
            ret 
= this.getClob(dbConn, sql, "IF_XML");
        } 
catch(Exception e) {
            ret 
= "";
        }
        
return ret;
    }
}
代码
<?xml version="1.0" encoding="GB2312"?>
<sqls>
    
<sql id="gyl.interface.log.insert">
        
<statement>
        
<![CDATA[
        insert into GYL_INTEFACE_LOG(IF_ID, IF_MODULE, IF_SYSTEM, IF_CODE, IF_XML, IF_RESULT, IF_TYPE, IF_CREATETIME, IF_UPDATETIME, IF_STATE, IF_SEND_CNT)
        values({n:if_id}, {if_module}, {if_system}, {if_code}, empty_clob(), empty_clob(), {n:if_type}, sysdate, sysdate, 0, 0)
        
]]>
        
</statement>
    
</sql>
    
<sql id="gyl.interface.log.update">
        
<statement>
        
<![CDATA[
        update GYL_INTEFACE_LOG 
        set IF_UPDATETIME=sysdate, IF_STATE={if_state}, IF_SEND_CNT=IF_SEND_CNT+1
        where IF_ID={n:if_id}
        
]]>
        
</statement>
    
</sql>
    
<sql id="gyl.interface.log.query4send">
        
<statement>
        
<![CDATA[
        select * from (
            select row_number() over (order by '1') as seq,TEMP_EXPPAGEQUERY.* 
            from (
                select IF_ID, IF_MODULE, IF_SYSTEM, IF_CODE from GYL_INTEFACE_LOG
                where (IF_STATE=0 or (IF_SEND_CNT<3 and IF_STATE=2))
                    and IF_MODULE={if_module} and IF_TYPE={n:if_type}
                order by IF_ID
            ) TEMP_EXPPAGEQUERY
        )
        where seq>0 and seq<=100
        
]]>
        
</statement>
    
</sql>
    
<sql id="gyl.interface.log.getXmlInfo">
        
<statement>
        
<![CDATA[
        select IF_XML from GYL_INTEFACE_LOG where IF_ID={n:if_id}
        
]]>
        
</statement>
    
</sql>
    
<sql id="gyl.interface.log.getXmlResult">
        
<statement>
        
<![CDATA[
        select IF_RESULT from GYL_INTEFACE_LOG where IF_ID={n:if_id}
        
]]>
        
</statement>
    
</sql>
</sqls>
原文地址:https://www.cnblogs.com/ding0910/p/1664654.html