在最近使用JDBC连接数据库的时候出现了NoClassDefFoundError错误
代码如下:
public class jdbcDemo9 {
public static void main(String[] args) {
//1.键盘录入,接受用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//2.调用方法
boolean flag = new jdbcDemo9().login(username,password);
//3.判断结果输出不同语句
if (flag){
System.out.println("登录成功");
}else {
System.out.println("用户名或密码错误");
}
}
/**
* 登录方法
*/
public boolean login(String username,String password){
if (username==null || password==null){
return false;
}
Connection conn = null;
Statement stmt = null;
ResultSet rs =null;
//连接数据库判断是否登录成功
try {
conn = JDBCUtils.getConnection();//在这里debug的时候显示conn=null
//2定义sql
String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
//3获取执行sql的对象
stmt = conn.createStatement();
//4执行查询
rs = stmt.executeQuery(sql);
//5.判断
return rs.next(); //如果有下一行,返回true
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs,stmt,conn);
}
return false;
}
}
具体报错为:Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class cn.itcast.jdbc.JDBCUtils
at cn.itcast.jdbc.jdbcDemo9.login(jdbcDemo9.java:58)
at cn.itcast.jdbc.jdbcDemo9.main(jdbcDemo9.java:21)
JDBCUtils工具类:
/**
JDBC工具类
*/
public class JDBCUtils {
private static String url;
private static String user ;
private static String password;
private static String driver;
static {
//获取资源文件,获取值
try {
//1、Propertits集合类
Properties pro = new Properties();
//获取src路径下的文件的方式:ClassLoader 类加载器 ,要获取Classlodar,要获取他对应的字节码文件
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL resource = classLoader.getResource("jdbc.propertits");
String path = resource.getPath(); //返回字符串路径
//System.out.println(path);
//2加载文件
pro.load(new FileReader(path));
//3获取属性,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//注册驱动
Class.forName(driver); //之前写的是:com.mysql.cj.jdbc.Driver
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**@param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这是配置文件:
url=jdbc:mysql://localhost:3306/db4?useSSL=false&serverTimezone=UTC
user=root
password=nana980801
driver=com.mysql.cj.jdbc.Driver
不知道兄弟解决没,个人觉得你将ClassLoader classLoader = JDBCUtils.class.getClassLoader();放在静态代码块中,按着加载顺序,应该是先加载static,所以你JDBCUtils类不一定加载了,因此报了NoClassDefFoundError错误,
很感谢你兄弟,但是还是解决不了,谢谢啦
已经解决了,是我没有正确连接到JDBCUtils上,代码没有问题,还是谢谢了
@晖晖晖晖: 什么意思啊
看一下你JDBCUtils这个 类
我已经发了,谢谢你