现在的位置: 首页 > 综合 > 正文

保存BLOB类型报java.lang.ClassCastException: oracle.sql.BLOB 的解决办法

2013年10月29日 ⁄ 综合 ⁄ 共 1153字 ⁄ 字号 评论关闭

默认tomcat的common/lib下是没有 ojdbc14.jar 这个jar包的,
但是如果要使用jndi方式配置数据库连接池的话,需要手工把ojdbc14.jar放到common/lib下,
当发布的工程里面需要实现向ORACLE数据库里存入一个BLOB字段时,会用到代码:

Java代码
  1. java.sql.Blob blob = rest.getBlob(1);              
  2. oracle.sql.BLOB blob2 = (oracle.sql.BLOB) blob;   
  3. outStream = blob2.getBinaryOutputStream();  

这里oracle.sql.BLOB 就在 ojdbc14.jar 这个jar包里,
但如果工程里也包含了这个jar包,那么当tomcat启动后,运行到这段代码的时候,会因为程序中有两个ojdbc14.jar 而产出问题(驱动包重复),
报java.lang.ClassCastException: oracle.sql.BLOB 异常。
解决办法:
1、删除工程中的 ojdbc14.jar, 但程序会编译报错,这时需要引用一个外部包(去tomcat的common/lib下找)
2、在发布的工程里把 ojdbc14.jar 删掉(即去tomcat下的webapps下发布的工程的WEB-INF/lib下去删)。
注:
如果使用jdbc方式连接数据库, 程序运行时, 连接数据库的是 工程自己的代码,会使用工程里的ojdbc14.jar下找相关类,这时候没问题。

Java代码
  1. Class.forName("oracle.jdbc.driver.OracleDriver");   
  2. Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@123.1.1.2:1521:orc""xx""xx");   

如果使用jndi方式连接数据库(配置连接池),程序运行时,连接数据库的是 web服务器(tomcat),它会去自己的common/lib下找jar包, 如果这时工程里也就,就重复了。

抱歉!评论已关闭.