【转】JAVA读取、写入、更新CLOB字段

示例代码

/* 
--建表语句如下: 
create table t_clob( 
        id varchar2(32) primary key, 
        clobfield CLOB 
        ); 
*/  
/** 
 * 读取CLOB字段的代码示例 
 */  
public void readClob() {  
    //自定义的数据库连接管理类   
    Connection conn = DbManager.getInstance().getConnection();  
    try {  
        PreparedStatement stat = conn  
                .prepareStatement("select clobfield from t_clob where id='1'");  
        ResultSet rs = stat.executeQuery();  
        if (rs.next()) {  
            oracle.sql.CLOB clob = (oracle.sql.CLOB) rs  
                    .getClob("clobfield");  
            String value = clob.getSubString(1, (int) clob.length());  
            System.out.println("CLOB字段的值:" + value);  
        }  
        conn.commit();  
    } catch (SQLException e) {  
        e.printStackTrace();  
    }  
    DbManager.getInstance().closeConnection(conn);  
}  
  
/** 
 * 写入、更新CLOB字段的代码示例 
 */  
public void writeClob() {  
    //自定义的数据库连接管理类   
    Connection conn = DbManager.getInstance().getConnection();  
    try {  
        conn.setAutoCommit(false);  
        // 1.这种方法写入CLOB字段可以。  
        PreparedStatement stat = conn  
                .prepareStatement("insert into t_clob (id,clobfield) values(sys_guid(),?)");  
        String clobContent = "This is a very very long string";  
        StringReader reader = new StringReader(clobContent);  
        stat.setCharacterStream(1, reader, clobContent.length());  
        stat.executeUpdate();  
  
        // 2.使用类似的方法进行更新CLOB字段,则不能成功   
        // stat.close();  
        // stat =null;  
        // stat =  
        // conn.prepareStatement("update t_clob set clobfield=? where id=1");  
        // stat.setCharacterStream(1, reader, clobContent.length());  
        // stat.executeUpdate();  
  
        // 3.需要使用for update方法来进行更新,  
        // 但是,特别需要注意,如果原来CLOB字段有值,需要使用empty_clob()将其清空。  
        // 如果原来是null,也不能更新,必须是empty_clob()返回的结果。  
        stat = conn  
                .prepareStatement("select clobfield from t_clob where id='1' for update");  
        ResultSet rs = stat.executeQuery();  
        if (rs.next()) {  
            oracle.sql.CLOB clob = (oracle.sql.CLOB) rs  
                    .getClob("clobfield");  
            Writer outStream = clob.getCharacterOutputStream();  
            char[] c = clobContent.toCharArray();  
            outStream.write(c, 0, c.length);  
            outStream.flush();  
            outStream.close();  
        }  
        conn.commit();  
    } catch (SQLException | IOException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    DbManager.getInstance().closeConnection(conn);  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值