发布网友 发布时间:2022-04-26 23:47
共4个回答
热心网友 时间:2022-04-12 00:51
要先将原来的数据的clob字段置为空,然后更新,用这个:
conn = DAOFactory.getInstance().getConnection();
// 事务处理
conn.setAutoCommit(false);
// 先把clob字段content置空,content为clob字段
String sql = "update " + table + " set content=empty_clob()";
stmt = conn.createStatement();
stmt.executeUpdate(sql);
// 从数据库中取出插入的clob字段
sql = "select content from " + table + " for update";
rs = stmt.executeQuery(sql);
if(rs.next()) {
// 给clob数据重新赋值,然后更新到数据库中
Clob clob = rs.getClob(1);
clob.setString(1, content);
sql = "update " + table + " set content=? where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setClob(1, clob);
pstmt.setString(2, id);
pstmt.executeUpdate();
}
// 事务提交
conn.commit();
conn.setAutoCommit(true);
补充:
Clob有点特殊,它是一个数据库相关的接口,没法实例化, 你可以通过SerialClob来实例化,这个我没用过。
api上这样写到:
public SerialClob(char[] ch)
throws SerialException,
SQLException按照给定 char 数组的序列化形式构造一个 SerialClob 对象。
新的 SerialClob 对象使用 char 数组中的数据进行初始化,因此允许未连接 RowSet 对象无需接触数据源即可建立序列化的 Clob 对象。
参数:
ch - 表示要序列化的 Clob 对象的 char 数组
你试试吧
热心网友 时间:2022-04-12 02:09
刚开始看错了!! 这个对
String des = "好书啊!";
Hibernate.createClob(des);
热心网友 时间:2022-04-12 03:44
在hbm映射文件里类型type="test",我以前也碰到过这样的问题,这样就能解决了
热心网友 时间:2022-04-12 05:35
大问题:
/**
*
*读数据库中clob字段的内容
*@return clob字段值
*
* */
public String read(){
String rtn = null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
String sql = "select " + fieldName + " from " + tableName + " where " + primaryKey + "=" + primaryValue;
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
java.sql.Clob clob = null;
if (rs.next()) {
clob = rs.getClob(fieldName);
rtn=clob.getSubString((long)1,(int)clob.length());
}
}catch (Exception ee) {
ee.printStackTrace();
rtn="";
}finally{
try {
rs.close();
rs=null;
pstmt.close();
pstmt=null;
} catch (SQLException ex) {
}
}
return rtn;
}
/**
*
*写数据库中clob字段的内容
*
* */
public String write(){
String sql = "update " + tableName + " set " + fieldName + "=empty_clob() where " + primaryKey + "=" + primaryValue;
PreparedStatement pstmt=null;
Statement st=null;
ResultSet rs=null;
try{
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
sql = "select " + fieldName + " from " + tableName + " where " + primaryKey + "=" + primaryValue;
st = conn.createStatement();
rs = st.executeQuery(sql);
java.sql.Clob clob;
if (rs.next()) {
clob = ((oracle.jdbc.OracleResultSet) rs).getClob(fieldName);
oracle.sql.CLOB my_clob = (oracle.sql.CLOB) clob;
java.io.Writer writer = my_clob.getCharacterOutputStream();
writer.write(this.getContent());
writer.flush();
writer.close();
}
conn.commit();
conn.setAutoCommit(true);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
rs.close();
rs = null;
st.close();
st = null;
pstmt.close();
pstmt = null;
}catch(Exception xxx){
}
}
return Constant.PROCESS_OK;
}
private String getContent() {
return this.clobValue;
}
public void setClobValue(String clobValue) {
this.clobValue = clobValue;
}