在使用tomcat连接池的情况下,怎样添加CLOB或BLOB字段值
来源:互联网 发布:贵州省大数据培训中心 编辑:程序博客网 时间:2024/05/22 12:30
今天写了一个小模块,其中需要对一个CLOB字段进行读写,由于之前未用到
这类字段,所以没遇到什么问题,于是就按普通的varchar类型来操作,即按
普通的insert和select来取值,在小于4K的文本时,没有什么问题,当一超过
该数字就开始报错,于是到网上查找原因:发现需要先往CLOB字段里面插入一个
空的CLOB值,即empty_clob,然后再取出并赋予新的文本,再予以更新:
相关案例代码如下:
以下代码引自(tomcat连接池中解决clob字段的问题 ):
http://blog.csdn.net/guaxixi627/archive/2007/08/02/1722755.aspx
con.setAutoCommit(false); //*
String sql = "insert into test values(1, empty_clob())";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);
con.commit(); //*
sql = "select content from test where id=1 for update";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) ...{
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
//如果用的是tomcat连接池此处使用
//oracle.sql.CLOB clob = (CLOB) ((org.apache.commons.dbcp.DelegatingResultSet)rs).getClob("CONTENT");
clob.putString(1, content);
sql = "update test set content=? where id=" + seq;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setClob(1, clob);
pstmt.executeUpdate();
end 引用结束
于是我就按照上面的来改,可我在oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1); 这一句始终都报
ClassCastException错误,我用的是Tomcat连接池,即使按照
oracle.sql.CLOB clob = (CLOB) ((org.apache.commons.dbcp.DelegatingResultSet)rs).getClob("CONTENT");
也一样 报错(org.apache.commons.dbcp.DelegatingResultSet需要引用commons.pool.jar和commons.dbcp.jar这两个包)
网上说一定要使用
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;
我的也确实是这样引用的,可依然报错,经过调试发现是java.sql.ResultSet无法转化为OracleResultSet,于是又去网上找:
终于发现原来是DBConnection的类型不对,如果要将java.sql.ResultSet转化为OracleResultSet,这个所依靠的Connection必须
要由OracleDataSource来返回的Connection才行,于是按照下面的这篇文章来做:
以下文章转自:http://topic.csdn.net/u/20070315/21/2ac06a1e-963a-419f-b38d-961fb1a6bfc8.html?75999205
需要用OracleDataSource代替DataSource,否则强制类型转换会出错。用法如下:
import oracle.jdbc.pool.*;
OracleDataSource ds = new OracleDataSource();
ds.setDriverType("thin");
ds.setServerName("dssw2k01");
ds.setPortNumber(1521);
ds.setDatabaseName("orcl"); // sid
ds.setUser("scott");
ds.setPassword("tiger");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO FUJIAN (NUM_ID,BFILE) VALUES("+numid+",EMPTY_BLOB())"); //增加空的BLOB
ResultSet myResultSet=stmt.executeQuery("SELECT BFILE FROM FUJIAN WHERE NUM_ID="+numid+" FOR UPDATE");//锁定更新BLOB
myResultSet.next();
BLOB myBlob=((OracleResultSet)myResultSet).getBLOB("BFILE");//强制类型转换
无论是CLOB还是BLOB问题解决。
我的开发环境是Tomcat6.0+MyEclipse6.5+Oracel 10G
附两种Connection的获取方法:
//javax.sql.DataSource获取Oracel连接
private Connection getJavaConnection() {
Context context = null;
Connection conn = null;
try {
context = new javax.naming.InitialContext();
DataSource dataSource=null;
dataSource = (DataSource) context.lookup("java:comp/env/TestDataSource");
conn = dataSource.getConnection();
} catch (Exception e) {
CLog.dumpMessage("javax.sql.DataSource 获取数据源ORA-1", e);
}
return conn;
}
//OracleDataSource获取Oracle连接
private Connection getOracleConnection() {
Connection conn = null;
try {
OracleDataSource ds = new OracleDataSource();
ds.setURL("jdbc:oracle:thin:@127.0.0.1:1521:ORCL");
ds.setUser("Test");
ds.setPassword("p123456");
conn = ds.getConnection();
} catch (Exception e) {
CLog.dumpMessage("oracle.jdbc.pool.OracleDataSource 获取数据源ORA-2", e);
}
return conn;
}
- 在使用tomcat连接池的情况下,怎样添加CLOB或BLOB字段值
- EXP-00003问题解决(解决导出表中有CLOB或BLOB字段的情况)
- EXP-00003问题解决(解决导出表中有CLOB或BLOB字段的情况)
- Blob、Clob字段的映射
- 在TOMCAT中,以jndi(tomcat连接池)方式操作clob字段时,类型转换异常的对策
- 使用JDBC操作基于Oracle的CLOB,BLOB字段类型
- 请问高手,在三层结构下,用oracle的long raw或blob字段保存图片,出现"ora-01465 无效的十六进制数"的错误,怎样解决?
- Oracle的clob,blob字段处理
- 关于 Oracle Clob Blob 字段的读写
- Blob,Clob字段
- 如何在oracle使用blob,clob
- 在Delphi5 中操作Oracle的Blob/Clob字段的Bug.
- 在Hibernate中实现Blob和Clob字段的数据访问
- mysql和Oracle在对clob和blob字段的处理
- ibatis操作oracle的clob字段和blob字段
- 怎样添加或删除字段!
- 在innodb中的blob字段怎样存储?
- 使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决
- 文件系统文献推荐
- 游戏引擎基础
- 数据之美-应用WebGL视觉化展现阿富汗平民伤亡
- 编辑器
- Mozilla发布嘉年华式WebGL展示网站Web O’Wonder
- 在使用tomcat连接池的情况下,怎样添加CLOB或BLOB字段值
- POJ 1811 Prime Test
- 批处理-统计一下当前目录中到底有多少种类型的文件
- SAP ABAP 常用事务代码
- CSS基础
- C++命名空间中操作符函数的动态链接问题
- 批处理-统计一下当前目录中到底有多少种类型的文件
- PHP正则表达式的快速学习方法
- Win7专业版 下安装ArcGIS 9.3总结