JDBC注册驱动连接MySQL数据库,使用配置文件是出现了这样的报错
(代码如下),出现这种情况,
- 首先检查自己的代码是否正确,是否有单词的拼写错误
- 在排除了单词拼写错误后,查看是否将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;
}
}