最近在学JDBC的类的抽取,碰上这个问题了,全程跟着视频写的代码,但是运行不出来,出现这个Could not initialize class错误,搜了一下午还是没头绪,请问各位大佬有类似经历吗,请问是怎么样解决的呢?
这个是JDBC抽取类的代码
package JDBC;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
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 JDBCUtil {
private static String url;
private static String user;
private static String password;
private static String driver;
// 资源文件读取. 因为只想加载一次,所以写在静态代码块中, 随类的加载而加载到内存(只加载一次)
static {
// 读取资源文件, 获取值
try {
//1. 创建properties集合类
Properties pro = new Properties();
// 获取src路径下的文件方式 --> ClassLoader 类加载器
ClassLoader classLoader = JDBCUtil.class.getClassLoader();
URL resource = classLoader.getResource("src/jdbc.properties");
String path = resource.getPath();
// System.out.println(path);
//2. 加载文件
// pro.load(new FileReader("F:\\JavaEE\\code\\idea_code\\coderZYGui\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据, 赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("Driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
// 写死,不好
// return DriverManager.getConnection("jdbc:mysql://localhost:3306/zy", "root", "1111");
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
*
* @param stmt 释放执行sql语句对象
* @param conn 释放数据库连接对象
*/
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源
*
* @param rs 释放结果集对象
* @param stmt
* @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();
}
}
}
}
这个是JDBC.properties的代码
url=jdbc:mysql:///db1
user=root
password=ftcftc321
Driver=com.mysql.jdbc.Driver
这个是对JDBCUtil抽取类的使用的代码
package JDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author xf
*定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
*/
public class Search {
public static void main(String[] args) {
List<Emp> list=new Search().findAll();
System.out.print(list);
}
public static List<Emp> findAll() {
// TODO 自动生成的方法存根
Connection conn=null;
Statement sttm=null;
ResultSet rs=null;
List<Emp> list=new ArrayList<>();
//1、注册驱动
try {
conn=JDBCUtil.getConnection();
//3、定义SQL语句
String sql="select *from emp";
//4、执行SQL对象
sttm=conn.createStatement();
//5、执行SQL
rs=sttm.executeQuery(sql);
//6、遍历结果集
Emp emp=null;
while(rs.next()) {
int ID=rs.getInt("id");
String name=rs.getString("ename");
int job_ID=rs.getInt("job_id");
int mjr=rs.getInt("mjr");
Date datetime=rs.getDate("joindate");
double salary=rs.getDouble("salary");
double bonus=rs.getDouble("bonus");
int dep_ID=rs.getInt("dept_id");
emp=new Emp();
emp.setID(ID);
emp.setName(name);
emp.setJob_ID(job_ID);
emp.setMjr(mjr);
emp.setDatetime(datetime);
emp.setSalary(salary);
emp.setBonus(bonus);
emp.setDep_ID(dep_ID);
list.add(emp);
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
JDBCUtil.close(rs, sttm, conn);
}
return list;
}
}