CLOB 字段读写

本文提供了创建包含CLOB字段的Oracle数据库表的示例,以及如何使用Java读取和写入CLOB字段的代码。在写入时,强调了更新CLOB字段的正确方法,包括使用forupdate和clear_clob()的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建测试表

建表语句如下:

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();  
    } finally {
    	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);  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码的搬运工-小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值