1)clob类型的数据不能直接insert,要先通过empty_clob()方法给它分配一个locator(同理,blob的用 empty_blob()函数分配locator).然后把它select出来(此时它当然没有数据,但结果集不是空的),得到一个Clob的对象,修改该对象的内容让它满足我们的需要,再通过update方法更新该行记录.
2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.
3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了!
package com.data;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import oracle.sql.CLOB;
public class WriteClob {
/**
* beckham 2009-12-7 下午09:47:36
*/
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:menhu";
String user = "zm";
String password = "zm";
Connection conn = DriverManager.getConnection(url, user, password);
//设置手动提交
conn.setAutoCommit(false);
Statement sta = null;
ResultSet rs = null;
PreparedStatement ps = null;
StringBuffer sb = new StringBuffer() ;
//clob字段的内容
sb.append("aaa").append("\r\n").append("bbbb").append("\r\n").append("ccc") ;
String sql ="insert into test values(2,empty_clob()) " ;
sta = conn.createStatement() ;
sta.executeUpdate(sql) ;
conn.commit() ;
//锁定并编辑当前数据
sql="select cdata from test where id=2 for update" ;
rs = sta.executeQuery(sql) ;
if(rs.next()){
//获取clob对象,此处的clob是 oracle.sql.Clob
CLOB clob = (CLOB)rs.getClob(1) ;
clob.putString(1, sb.toString()) ;
//执行更新操作
sql="update test set cdata=? where id=2" ;
ps = conn.prepareStatement(sql) ;
//给clob字段赋值
ps.setClob(1, clob) ;
ps.executeQuery() ;
}
conn.commit();
rs.close();
ps.close();
sta.close();
conn.close();
}
}
2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.
3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了!
package com.data;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import oracle.sql.CLOB;
public class WriteClob {
/**
* beckham 2009-12-7 下午09:47:36
*/
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:menhu";
String user = "zm";
String password = "zm";
Connection conn = DriverManager.getConnection(url, user, password);
//设置手动提交
conn.setAutoCommit(false);
Statement sta = null;
ResultSet rs = null;
PreparedStatement ps = null;
StringBuffer sb = new StringBuffer() ;
//clob字段的内容
sb.append("aaa").append("\r\n").append("bbbb").append("\r\n").append("ccc") ;
String sql ="insert into test values(2,empty_clob()) " ;
sta = conn.createStatement() ;
sta.executeUpdate(sql) ;
conn.commit() ;
//锁定并编辑当前数据
sql="select cdata from test where id=2 for update" ;
rs = sta.executeQuery(sql) ;
if(rs.next()){
//获取clob对象,此处的clob是 oracle.sql.Clob
CLOB clob = (CLOB)rs.getClob(1) ;
clob.putString(1, sb.toString()) ;
//执行更新操作
sql="update test set cdata=? where id=2" ;
ps = conn.prepareStatement(sql) ;
//给clob字段赋值
ps.setClob(1, clob) ;
ps.executeQuery() ;
}
conn.commit();
rs.close();
ps.close();
sta.close();
conn.close();
}
}