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

Question:

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

Analysis:

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

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

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

如下图:

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

此时我们可以正常编译.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项目已添加外部扩展Oracle驱动文件后连接数提示java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver的两种解决办法及分析_第2张图片

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

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

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

 

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

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

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

2. 然后进入Java Build Path 界面

选中Libraries进入下图界面

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

如下图

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(JAVA_Question)