求救:关于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());}
}

%>



//=======================================
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用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页面上直接操作数据库,代码很难维护.
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用域     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)     11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发

67,514

社区成员

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

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