String 转化为 java.io.Clob 对象??

发布网友 发布时间: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;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com