【JDBC】Could not initialize class utils.jdbcutils报错的解决办法

在使用JDBC连接MySQL数据库时遇到'Could not initialize class utils.jdbcutils'的错误。首先检查代码中是否有拼写错误,然后确保包含.properties文件的src目录被设置为源文件夹。通过检查这些步骤,成功解决了问题。涉及到的文件包括JDBC工具类、配置文件和测试类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC注册驱动连接MySQL数据库,使用配置文件是出现了这样的报错
(代码如下),出现这种情况,

  1. 首先检查自己的代码是否正确,是否有单词的拼写错误
  2. 在排除了单词拼写错误后,查看是否将properties问价所在的文件夹(我这里是在 src 文件夹下)是否设为源

问题就能解决了
在这里插入图片描述

我这里使用了三个文件(注意一下我各文件的包位置)在这里插入图片描述

JDBC工具类

package utils;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/*
* JDBC 工具类
 */
public class JDBCUtils01 {
    /*
    * 获取连接
    * @return 连接对象
    *
    *  需求: 不想传参(麻烦) 还要保证工具类的通用性
    *  解决:  配置文件 jdbc.properties
    * 只需要读取一次文件,使用静态代码块
     */

    protected static  String url;
    protected static  String user;
    protected static  String password;
    protected static  String driver;

    static {
        // 读取资源文件,获取值


        try {
            // 1. 创建一个Properties 集合类
            Properties pro = new Properties();
            // 2. 加载文件
            // 获取src路径下的文件方式 ——> ClassLoader类加载器
            ClassLoader classLoader = JDBCUtils01.class.getClassLoader();
            URL res = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
			pro.load(new FileReader(path));
			
//  也可以直接添加路径(建议写绝对路径)          pro.load(new FileReader("D:\\IDEA2021.3.1\\javaweb\\jdbc01\\src\\jdbc.properties"));
            
            // 3. 获取数据并赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            // 4. 注册驱动
            Class.forName(driver);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    public static void close(Statement stmt, Statement statement, Connection conn){
       if (stmt != null) {
          try {
              stmt.close();
          } catch (SQLException e) {
              e.printStackTrace();
          }
       }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    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:///db0517?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
/*
* 在本地地址下,这里 URL 只需要写url = jdbc:mysql:///db0517即可
*/

user = root
password = 200010191992+
driver = com.mysql.cj.jdbc.Driver

测试类

package com.jdbc;

import com.domain.Emp;
import utils.JDBCUtils01;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

// 演示JDBC 工具类
public class Demo05_01 {
    public static void main(String[] args) {
        List<Emp> list = new Demo05_01().findAll();
        System.out.println(list);
    }
    /*
     * 查询所有emploeey对象
     */
    public List<Emp> findAll() {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Emp> list = null;
        try {
//            Class.forName("com.mysql.jdbc.Driver");
//            conn = DriverManager.getConnection("jdbc:mysql:///db0517?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true", "root", "200010191992+");
            conn = JDBCUtils01.getConnection();
            String sql = "select * from emploeey";
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);

            Emp emp = null;
            list = new ArrayList<Emp>();
            while (rs.next()) {
                int id = rs.getInt("e_no");
                String name = rs.getString("e_name");
                String gender = rs.getString("e_gender");
                int d_no = rs.getInt("dept_no");
                String job = rs.getString("e_job");
                int salary = rs.getInt("e_salary");
                Date data = rs.getDate("hireDate");

                // 创建emp对象,并赋值
                emp = new Emp();
                emp.setE_no(id);
                emp.setE_name(name);
                emp.setE_gender(gender);
                emp.setDept_no(d_no);
                emp.setE_job(job);
                emp.setE_salary(salary);
                emp.setHireDate(data);

                // 装载集合
                list.add(emp);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            try {
//                if (rs != null)
//                    rs.close();
//                if (stmt != null)
//                    stmt.close();
//                if (conn != null)
//                    conn.close();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
            JDBCUtils01.close(rs,stmt,conn);
        }
        return list;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值