求救:关于jdbc 存取 oracle clob 的问题?

p731 2005-11-16 04:41:59
快疯了,在网上找了很多相关资料参考。结果还是搞不定。代码在下面。其中的字符串s的长度是几个字母时,还是可以存储的,只不过是乱码。当长度加到数十个时,执行时,在commit的地方就停止响应了。(weblogic 8 oracle 817)
//========================================

<%@ page contentType="text/html; charset=gb18030" language="java" %>
<%@ page import="javax.sql.*,java.sql.*,oracle.jdbc.driver.*"%>

<%

java.sql.Connection sqlCon = null;
boolean f = false;
Statement st = null;
OraclePreparedStatement pstmt = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
sqlCon = DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.113:1521:ora8i","zbxt","zbxt");
f = sqlCon.getAutoCommit();
sqlCon.setAutoCommit(false);
st = sqlCon.createStatement();

oracle.sql.CLOB myClob = null;
st.execute("SELECT nr from tt where id = '1' for update");
OracleResultSet rs = (OracleResultSet)st.getResultSet();
while (rs.next()) {
myClob = (oracle.sql.CLOB)rs.getClob("nr");
}
String s = "fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdddd";
System.out.println("hhhhhhhhhhhhhhhhhhhh");
myClob.putString(1,s);
System.out.println("dddddddddddddddddddddddd");
pstmt = (OraclePreparedStatement)sqlCon.prepareStatement("update tt set nr=? where id='1'");
pstmt.setClob(1,myClob);
pstmt.executeUpdate();

/*java.io.Writer wr = myClob.getCharacterOutputStream();
BufferedWriter bwr = new BufferedWriter(wr);
bwr.write(s,0,s.length());
bwr.flush();
bwr.close();*/
sqlCon.commit();
System.out.println("ffffffffffffffffffffffffffffffff");
} catch(Exception e) {
sqlCon.rollback();
System.out.println(e.toString());
} finally {
try {
if(st != null) st.close();
if(pstmt != null) pstmt.close();
if(pstmt != null) st.close();
if(sqlCon != null) {
sqlCon.setAutoCommit(f);
sqlCon.close();
}
} catch(Exception e) {System.out.println(e.toString());}
}

%>



//=======================================
...全文
166 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofhawks 2005-11-17
  • 打赏
  • 举报
回复
在你做insert,update,delete操作的时候就把Clob当成varchar2就可以了,代码不用做任何改动,只有在query的时候,把查询得到的对应Clob字段转换成String就可以正常显示了.
p731 2005-11-16
  • 打赏
  • 举报
回复
太好了,谢谢你。我的应用目前也就万把字。
kingofhawks 2005-11-16
  • 打赏
  • 举报
回复
当你的Clob字段在32K以下时,写Clob的时候与写varchar2字段没有任何区别,只有在读取数据的时候需要做转换.而且,不建议你在JSP页面上直接操作数据库,代码很难维护.

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧