使用JDBC出现NoClassDefFoundError异常的解决方法

今天在学习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目录下就可以解决问题。

原文地址:https://www.cnblogs.com/cuijiade/p/9261546.html

时间: 2024-10-17 04:38:30

使用JDBC出现NoClassDefFoundError异常的解决方法的相关文章

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.发现报错的语句是: 1 foo.divide(bar)); 原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常.解决方法:

.net安装部署“Error 1001 在初始化安装时发生异常” 的解决方法

状况描述:打包安装后,如果删除安装目录中的某个文件,这时从桌面快捷方式启动软件系统会自动运行修复程序,此时因为路径问题会报出"错误 1001 在初始化安装时发生异常xxx"的异常.(前提是你的安装部署中加入了"自定义操作",并为其传值). 查找原因原来是"自定义操作"中CustomActionData值有误造成.未出错前的CustomActionData. /DbName=[DBNAME] /ServerName=[SERVERNAME] /Us

Android开发:StaggeredGridView瀑布流控件运行异常崩溃解决方法

StaggeredGridView是github上一个开源的瀑布流图片库,本文将分享集成StaggeredGridView时碰到的异常以及解决方法,StaggeredGriedView开源地址为:https://github.com/maurycyw/StaggeredGridView. StaggeredGriedViewDemo运行报错异常为: java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.ex

Maven常见异常及解决方法(转)

异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for project biz_zhuhai:biz_zhuhai:jar:0.0.1-SNAPSHOT: Failed to collect dependencies for [com.maywide.ibh:lib345:pom:1.0 (compile)]: Failed to read artifact des

Maven常见异常及解决方法

异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for project biz_zhuhai:biz_zhuhai:jar:0.0.1-SNAPSHOT: Failed to collect dependencies for [com.maywide.ibh:lib345:pom:1.0 (compile)]: Failed to read artifact des

Oracle 使用本地IP地址连接异常的解决方法

前几天的安装的Oracle测试环境,今天发现不能使用本地IP连接,连接提示错误 "Oracle the network adapter could not establish the connection" 这个问题折腾我时间比较长,网上很多资料都不太适合我的情况.不过最后还是被找到了 花了很多时间在其他方面没有锁定问题根源. 1 开始以为是防火墙 server client端都排除 2 oracle client端问题 (ubuntu 安装的client端) 3 最后用程序测试发现还

Java中的ExceptionInInitializerError异常及解决方法

当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常.如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化的.如果在这个静态变量初始化的过程中出现了异常,那么就会抛出 java.lang.ExceptionInInitializerError异常.任何异常都可能会引发这种情况,比如说,java.lang.ArrayIndexOutOfBound或者java.lang.NullPointerExcepti

Emgu CV的一个异常的解决方法

今年组里有大项目落我头上了,并不能像去年一样回家还能搞搞Cocos2dX,一把老泪流了下来... 回到正题,由于组里需要做一个显示板的自动测试项目,涉及到Computer Vision.不得不说,这才是项目里的大坑.之前一直在做其他基础库的研发,最近开始了视觉识别的研发进度.由于市面上没有很合适的开源工业摄影机,只能硬着头皮先试试一些已经有先例的视觉库来尝试.前期项目架构在C#上,自然而然就想到了OpenCV在包装C#的库Emgu CV,而且这个库跨平台,很适合后期移植到其他平台上去,我就选择了

university-imageloader使用遇到的异常及解决方法

异常:java.lang.IllegalArgumentException: ImageAware should wrap ImageView. ImageView 解决方法: private void initImageLoader(Context context){ options= new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.local_image_default) .showImageOnFail(