请教jdbc操作Oracle中CLOB或BLOB

death0320 2005-01-15 12:23:19
我照网上的方法写了如何操作大对象。操作方法为:
之前是conn.setAutoCommit(false);
1.先插入一个empty_clob()的clob。
2.然后再用select.....for update读出这个clob。
3.在java中用resultset得出了这个clob。是这样写的oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);于是问题就出现在这段代码上了。如果用java.sql.Clob来读这个clob不行,说是不支持的特性,可是用我写的方法就报ClassCastException,指出是类型转换出错。可是我在网上看的都是这样的方法。不知道是什么原因,有谁知道?
4.用clob.putString(1,"ajdfajklsdjfklasd");把字符放入clob.
5.最后用update来更新这个clob。然后conn.commit();

请教高手指点,非常感谢。
...全文
335 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
death0320 2005-01-20
  • 打赏
  • 举报
回复
我的奇怪的问题,用了tomcat的连接池就会报类型转换错误,如果直接用连接数据库就没有错。不知道是什么原因,有哪位高手碰到过这样的问题或是知道如何解决的呢?
ricky921 2005-01-17
  • 打赏
  • 举报
回复
学习中
帮你顶
GJA106 2005-01-17
  • 打赏
  • 举报
回复
简单把你的代码发给我吧,留引用包部分和操作CLOB的方法。
email:ganja@21cn.com
death0320 2005-01-17
  • 打赏
  • 举报
回复
我用了CLOB clob = ((OracleResultSet)rset).getCLOB (1);
还是报ClassCastException的错啊,请想想看你是怎么解决的吧
GJA106 2005-01-17
  • 打赏
  • 举报
回复
这个问题碰到过,忘了当时的解决方式。代码 CLOB clob = ((OracleResultSet)rset).getCLOB (3);是参考Oracle自代的deom,楼主可以自己去查。目录:%ORACLE_HOME%\ora90\jdbc\demo\samples\oci8\object-samples
GJA106 2005-01-17
  • 打赏
  • 举报
回复
CLOB clob = ((OracleResultSet)rset).getCLOB (1);
death0320 2005-01-17
  • 打赏
  • 举报
回复
to GJA106(中文字符):你给的代码我已经试过了,还是报oracle.sql.CLOB clob = (oracle.sql.CLOB) c;这行错啊。郁闷死了,不知道为什么会有这种错的。
GJA106 2005-01-17
  • 打赏
  • 举报
回复
以下代码是用于产品中的,在weblogic下跑:
Clob clob = resultset.getClob(1);
out = ( (weblogic.jdbc.common.OracleClob) clob).getCharacterOutputStream();

//读CLOB内容
Clob myClob = rs.getClob("NR");
Reader readClob = myClob.getCharacterStream();
int leg = (int) myClob.length();
char[] c = new char[ (int) myClob.length()];
for (int i = 0; i < leg; i++) {
readClob.read(c);
}

楼主,这些功能Oracle都自带有的!
Sunboyjava 2005-01-17
  • 打赏
  • 举报
回复
tomcat有类型转换错误.....把你应用程序目录WEB-INF\LIB 下的驱动移走....
wwwer1 2005-01-17
  • 打赏
  • 举报
回复
你如果用的是weblogic容器
那么oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
替换成:
weblogic.jdbc.vendor.oracle.OracleThinClob clob=(weblogic.jdbc.vendor.oracle.OracleThinClob )rs.getClob(1);
death0320 2005-01-17
  • 打赏
  • 举报
回复
我发现问题了,我用的Connection是连接池得到的,就是应为这个才出错的,如果是一般得到的Connection就没有什么问题。还有一个问题是:如何从数据库中读出来Clob,我的clob里面全是字符。我要把clob值给String型,以方便在页面上显示。
GJA106 2005-01-17
  • 打赏
  • 举报
回复
楼主以下是我的代码,运行正常,在你机器上试一下。

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.sql.*;

import oracle.jdbc.*;
import oracle.sql.*;

/*import com.ninetowns.czweb.dao.NewsDAO;
import com.ninetowns.czweb.po.NewsPO;
import com.ninetowns.czweb.db.*;
import com.ninetowns.czweb.util.ClobUtil;*/

public class Oracle {
public Oracle() {
}

public boolean addNews() {
try{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:@192.168.0.193:1521:oratest","OCP", "OCP");
PreparedStatement ps = conn.prepareStatement("select NR from test where ID=5");
ResultSet rs = ps.executeQuery();
while(rs.next()){
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
System.out.println(clob);
}
rs.close();
ps.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}finally{

}
return true;
}

public static void main(String[] args) {
Oracle oracle = new Oracle();
oracle.addNews();
}
}
death0320 2005-01-17
  • 打赏
  • 举报
回复
我已经发email给你了,谢谢你,帮我看看,郁闷死了
以梦为马 2005-01-17
  • 打赏
  • 举报
回复
友情up。
GJA106 2005-01-15
  • 打赏
  • 举报
回复
不可能的,试一下下面代码:
java.sql.Clob c = resultset.getClob(1);
oracle.sql.CLOB clob = (oracle.sql.CLOB) c;
zyg158 2005-01-15
  • 打赏
  • 举报
回复

67,512

社区成员

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

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