使用JDBC出现NoClassDefFoundError异常的解决方法
来源:互联网 发布:armour是什么牌子 淘宝 编辑:程序博客网 时间:2024/05/16 10:12
今天在学习JDBC的过程中,运行一个JDBC的Java时报错,错误如下:
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class me.gacl.utils.JdbcUtils
at me.gacl.demo.Test.main(Test.java:30)
查了一下,这个异常是说找不到me.gacl.utils.JdbcUtils这个类,看了一下这个的代码,如下:
package me.gacl.utils;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtils {
private JdbcUtils(){};
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;
static{
try{
//读取db.properties文件中的数据库连接信息
Properties prop = new Properties();
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
prop.load(in);
//获取数据库连接驱动
driver = prop.getProperty("driver");
//获取数据库连接URL地址
url = prop.getProperty("url");
//获取数据库连接用户名
username = prop.getProperty("username");
//获取数据库连接密码
password = prop.getProperty("password");
//加载数据库驱动
Class.forName(driver);
}catch(Exception e){
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection()throws SQLException{
return DriverManager.getConnection(url,username,password);
}
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
//关闭存储查询结果的ResultSet对象
rs.close();
}catch(Exception e){
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try{
//关闭负责执行SQL命令的Statement对象
st.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(conn!=null){
try{
//关闭Connection数据库连接对象
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
发现并没有出现明显的错误,在看错误信息,发现无法实例化这个类,所以是静态代码块的问题,想看具体出现的异常是什么,于是把throw new ExceptionInInitializerError(e);
改为e.printStackTrace();然后出现了具体的异常信息如下:
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at me.gacl.utils.JdbcUtils.<clinit>(JdbcUtils.java:25)
at me.gacl.demo.Test.main(Test.java:17)
java.sql.SQLException: The url cannot be null
at java.sql.DriverManager.getConnection(DriverManager.java:649)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at me.gacl.utils.JdbcUtils.getConnection(JdbcUtils.java:45)
at me.gacl.demo.Test.main(Test.java:17)
发现出现异常的原因是这个类url为空,说明InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");中的db.properties无法得到,然后再去看class.getClassLoader().getResourceAsStream的方法,显示这个方法会从classpath下去获取文件,所以一般把配置文件放在工程的\WEB-INF\classes文件夹下,然后发现db.properties不在classes文件下下,至此异常解决。
将配置文件放在classes目录下就可以解决问题。
- 使用JDBC出现NoClassDefFoundError异常的解决方法
- Jdbc的异常 NoClassDefFoundError
- 安装ADT17后出现NoClassDefFoundError 的解决方法
- 关于打包自定义标签,并导入项目使用时,出现java.lang.NoClassDefFoundError: JspException异常,解决方法和注意事项!
- 避免使用openurl时出现异常的解决方法
- android中java.lang.NoClassDefFoundError异常的解决方法之一
- 运行时出现“java.lang.NoClassDefFoundError”的解决方法
- cmd编译出现 java.lang.NoClassDefFoundError的解决方法
- JDBC连接SQLServer出现的异常
- Matlab中使用xlswrite函数时出现服务器出现异常的解决方法
- Matlab中使用xlswrite函数时出现服务器出现异常的解决方法
- NoClassDefFoundError的一个解决方法
- 使用JDBC连接DB2时encoding not supported异常的解决方法
- 针对使用Myeclipse进行JDBC链接MySQL时添加中文数据出现?的解决方法!
- java中常出现的异常及解决方法
- dnw出现未处理的异常解决方法、、
- jedis 中出现ArrayIndexOutOfBoundsException异常的解决方法
- web Services中出现的异常解决方法
- Codeforces Round #295 (Div. 2)-C. DNA Alignment
- cmd——窗口标题及字体颜色、背景颜色设置
- 配置tomcat环境变量
- Java实现几种常见排序方法
- 单片机的动态内存管理-一以链表为例
- 使用JDBC出现NoClassDefFoundError异常的解决方法
- JAVA从菜鸟【入门】到新手【实习】一一Python小项目(Anaconda2)2,7X
- TYVJ 1077 有理逼近
- 洛谷P1941 Flappy Bird
- 1、工厂方法模式(Factory Method)
- 猜数字—— python 图形化界面编程初探
- IntelliJ IDEA 搭建Spring源码阅读环境
- position().top和scrollTop()和.offset()
- 10131