JavaWeb项目已添加外部扩展Oracle驱动文件后连接数提示java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver的两种解决办法及分析

Question:

JavaWeb项目已添加外部扩展Oracle驱动文件后连接数据库时提示java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver

Analysis:

通过异常提示可以看出该问题是因为找不到Oracle数据库的驱动类

我们在发布Web项目前需要将Web项目相关类进行编译,形成JVM可执行的.class文件

此时编译不会报找不到Oracle数据库驱动的异常,因为未发布项目前我们可以找得到驱动文件所在的位置

如下图:

此时我们可以正常编译.java文件而不会出现找不到Oracle数据库的驱动类异常

 

而发布Web项目需要在Tomcat中部署Web项目相关JSP和相关class文件(此时.java的源文件无作用,编译后的.class文件才是有用的文件)

这个时候我们在加载类时找不到Oracle数据库的驱动类

为什么呢?

因为在Tomcat容器中加载类的顺序为

(网上流传的加载类顺序,这个比较全,这些内容会在《深入浅出JVM》中介绍,等五一结束去图书馆借这本书再进行修改)

1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 
2.环境变量CLASSPATH中的jar和class文件。 
3.$CATALINA_HOME/common/classes下的class文件。 
4.$CATALINA_HOME/commons/endorsed下的jar文件。 
5.$CATALINA_HOME/commons/i18n下的jar文件。 
6.$CATALINA_HOME/common/lib 下的jar文件。 
(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。) 
7.$CATALINA_HOME/server/classes下的class文件。 
8.$CATALINA_HOME/server/lib/下的jar文件。 
9.$CATALINA_BASE/shared/classes 下的class文件。 
10.$CATALINA_BASE/shared/lib下的jar文件。 
11.各自具体的webapp /WEB-INF/classes下的class文件。 
12.各自具体的webapp /WEB-INF/lib下的jar文件。

不会从其他路径加载类(未自定义加载类配置)

自然也就找不到Oracle数据库的驱动类,会提示ClassNotFoundException异常

 

Solution: (本例IDE为Eclipse;数据库为Oracle;Web容器为Tomcat)

Method 1 : 需要复制数据库驱动文件

将数据库的驱动文件复制到{ 你的项目的 }\WebContent\WEB-INF\lib文件夹下 

当编译运行JavaWeb项目时会自动将ojdbc3.jar这个驱动文件部署到Tomcat中的Web项目中的\WEB-INF\lib如下图

此时就不会再有找不到Oracle驱动的ClassNotFound异常,如果其他设置正确就会正确运行

 

 

Method 2 : 不需要复制数据库驱动文件,在部署项目时将Oracle驱动文件部署(复制)到Tomcat中的Web项目中的\WEB-INF\lib目录中

1. 右击你的JavaWeb项目选择Build Path的再选择Configure Build Path, 如下图

2. 然后进入Java Build Path 界面

选中Libraries进入下图界面

点击Add External JARs导入外部jar文件,这里即数据库驱动文件

如下图

3. 单击Oracle驱动包,然后单击打开将Oracle驱动包导入, 如下图

4. 导入数据库驱动包后,在Java Build Path的Libraries下会出现刚刚导入的数据库驱动包,如下图

5. 单击左侧Java Build Path上方的Deployment Assembly进入Web Deployment Assembly,然后单击Add按钮,如下图

6. 然后双击Java Build Path Entries进入Java Build Path Entries

7. 然后单击该驱动包选中,点击finish. 部署结束

当编译运行JavaWeb项目时会自动将ojdbc3.jar这个驱动文件部署(复制)到Tomcat中的Web项目中的\WEB-INF\lib如下图

此时就不会再有找不到Oracle驱动的ClassNotFound异常,如果其他设置正确就会正确运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值