默认tomcat的common/lib下是没有 ojdbc14.jar 这个jar包的,
但是如果要使用jndi方式配置数据库连接池的话,需要手工把ojdbc14.jar放到common/lib下,
当发布的工程里面需要实现向ORACLE数据库里存入一个BLOB字段时,会用到代码:
- java.sql.Blob blob = rest.getBlob(1);
- oracle.sql.BLOB blob2 = (oracle.sql.BLOB) blob;
- outStream = blob2.getBinaryOutputStream();
java.sql.Blob blob = rest.getBlob(1); oracle.sql.BLOB blob2 = (oracle.sql.BLOB) blob; 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下找相关类,这时候没问题。
- Class.forName("oracle.jdbc.driver.OracleDriver");
- Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@123.1.1.2:1521:orc", "xx", "xx");
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@123.1.1.2:1521:orc", "xx", "xx");
如果使用jndi方式连接数据库(配置连接池),程序运行时,连接数据库的是 web服务器(tomcat),它会去自己的common/lib下找jar包, 如果这时工程里也就,就重复了。