1. 为什么要封装JDBC工具类:减少重复代码、提高代码复用性、简化数据库操作、统一管理数据库连接、便于维护和修改
2.封装工具类的简单示例代码:
package com.study.jdbc;
import java.sql.*;
import java.util.ResourceBundle
/*
* */
/**
* 工具类的构造方法一般是私有化的,因为工具类中的一般是静态的,
* 工具类就是为了方便变成,所以工具类中的方法都是直接采用类名
* 的方式访问,因此不需要new对象
* @param
* @return
*/
public class DBUtils {
private DBUtils() {}
private static String driver;
private static String url;
private static String user;
private static String password;
static {
// 在这里读取属性配置文件,给静态变量赋值
ResourceBundle bundle = ResourceBundle.getBundle("com.study.jdbc.jdbc");
driver = bundle.getString("driver");
url = bundle.getString("url");
user = bundle.getString("user");
password = bundle.getString("password");
// 在类加载的时候 注册驱动,对于整个应用程序来说,注册驱动只需要做一次即可,所以选择静态代码块
// 静态代码块在类加载时执行, 并且只执行一次
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
/*
* 获取数据库连接对象
* */
public static Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
/**
* 释放连接资源
* @param conn 连接对象
* @param stmt 数据库操作对象
* @param rs 结果集对象
*/
public static void close(Connection conn, Statement stmt, ResultSet rs){
// 确保在程序结束时关闭数据库连接
if (rs != null) {
try {
// 关闭数据库连接
conn.close();
} catch (SQLException e) {
// 处理关闭连接时可能发生的 SQL 异常
throw new RuntimeException(e);
}
}
if (stmt != null) {
try {
// 关闭数据库连接
conn.close();
} catch (SQLException e) {
// 处理关闭连接时可能发生的 SQL 异常
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
// 关闭数据库连接
conn.close();
} catch (SQLException e) {
// 处理关闭连接时可能发生的 SQL 异常
throw new RuntimeException(e);
}
}
}
}
3.使用工具类的简单示例代码:
package com.study.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC_actionMod {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try {
// 1. 注册驱动
// 2. 获取连接
conn = DBUtil.getConnection(); // TODO 通过工具类获取连接
// 3.获取预编译的数据库操作对象
String sql = "update emp set ename=?, job=?,sal=? where empno=?";
ps = conn.prepareStatement(sql);
ps.setString(1, "李四修改2");
ps.setString(2, "产品经理");
ps.setDouble(3, 5000.0);
ps.setInt(4, 12);
// 4. 执行sql语句
int count = ps.executeUpdate();
// 5. 处理结果
System.out.println("修改了" + count + "条记录");
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
// 6.释放资源
DBUtil.close(conn,ps, null); // TODO 通过工具类关闭资源
}
}
}