前面注册驱动和创建连接的代码都是重复的,可复用性不高,如果需要更换数据库或者用户名或者密码的话要改动很多内容,可维护性不高,为了方便复用,可以将经常变换的内容写入到配置文件
创建一个db.properties文件,将数据库驱动和用户名密码等内容写入到该文件
classDriver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/study1?useSSL=false&serverTimezone=UTC
username=root
password=root
之前说过properties文件每行存放 键=值,不用分号结尾
再创建一个工具类DBUtil,用来注册驱动和获取连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
public class DBUtil {
private static String driverClass;
private static String url;
private static String username;
private static String password;
static {
ResourceBundle rb=ResourceBundle.getBundle("util/db");
// ResourceBundle rb=ResourceBundle.getBundle("util.db");//配置文件在src目录下util包下
driverClass=rb.getString("driverClass");
url=rb.getString("url");
username=rb.getString("username");
password= rb.getString("password");
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}
}
其中ResourceBundle抽象类可以读取properties配置文件
ResourceBundle类用于国际化(多语言)的库。它能够根据为系统配置的默认区域设置返回消息。适用于开发世界各地的项目
static final ResourceBundle getBundle(String baseName)读取的文件是在classpath路径下,即src或者src目录下,如果properties文件不再src目录下,而在某个包的目录下,需要以包名/文件名的方式引入,注意文件名不要加后缀
String getString(String key)读取某个键对应的值,以字符串形式返回
经过改造后的jdbc代码变成这样子了
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import util.DBUtil;
public class JdbcTest01new {
public static void main(String[]args) {
try (
//获取连接Connection
Connection conn=DBUtil.getConnection();
///得到执行sequel语句的对象Statement
Statement stmt=conn.createStatement();
//执行sql语句,并返回结果
ResultSet rs=stmt.executeQuery("select * from employee")
//处理结果
){
while(rs.next()) {
System.out.println(rs.getObject("employeenumber"));
System.out.println(rs.getObject("employeename"));
System.out.println(rs.getObject("departmentnumber"));
System.out.println(rs.getObject("salary"));
System.out.println(rs.getObject("hiredate"));
System.out.println("-================");
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
所以,以后修改数据库或者用户名/密码时,直接修改配置文件就好了,配置文件中的driverClass和url适用于mysql8.0版本驱动