/**
* 写入、更新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、插入记录,EMPTY_CLOB(),初始化字段。2、获取CLOB字段指针,select into for update 或者利用insert 语句的return 选项获取。
3、加载数据,dbms_lob.WRITEAPPEND
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)