java clob写入_JAVA读取、写入、更新CLOB字段

本文提供Java读取、写入和更新CLOB字段的代码示例。通过预编译的SQL语句和CLOB对象,展示了如何从数据库中获取CLOB内容,并使用StringReader写入和更新CLOB字段。特别强调了更新CLOB字段时的注意事项,如使用for update和empty_clob()来确保操作成功。
摘要由CSDN通过智能技术生成

/*

--建表语句如下:

create table t_clob(

id varchar2(32) primary key,

clobfield CLOB

);

*/

/**

* 读取CLOB字段的代码示例

*

* 作者:wallimn

* 时间:2015-1-16

* 联系:wallimn@sohu.com

*/

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字段的代码示例

*

* 作者:wallimn

* 时间:2015-1-16

* 联系:wallimn@sohu.com

*/

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、付费专栏及课程。

余额充值