最近在学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;
}
}
把jdbc.properties放到src下。 然后:classLoader.getResource("jdbc.properties"); 试一下看看行不行。
一、创建的数据源是否正确,驱动路径,数据库路径,用户名,密码,你是用的是BasicDataSource的话要导入连接池的一些jar包:dbcp,pool这类的,具体的不太记得了,如果你用的是c3p0的数据源,难么你的c3p0的包是否导入了,如果是自带的jdbc貌似不用导什么包
二、如果你用的是Template是否创建正确,Template中的property是否引用正确,如果你用了jdbcDosuppert这个接口,那么Templae就不应该再xml中出现
三、jar包是否导入完全正确
四、这个因该关系不大,需要引用导jdbc的Dao是否再xml中实例化并且将数据源引用
不知道能不能帮你解决问题,你给的信息我只能帮你到这里了
我想请问一下您这个问题解决了没?
你导入包了吗