连接数据库工具类:DBUtil.java
package util;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;/** @param null:* jdbc连接工具类* @return null* @author liu* @description TODO* @date 2024/5/25 17:05*/
public class DBUtil {private static Connection con;private static final String driver;private static String url;private static String username;private static String password;static{// 读取数据库连接配置文件 反射机制加载类下资源InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");Properties properties = new Properties();try {// 加载输入流文件内容properties.load(is);driver = properties.getProperty("driver");url = properties.getProperty("url");username = properties.getProperty("username");password = properties.getProperty("password");Class.forName(driver);} catch (IOException | ClassNotFoundException e) {throw new RuntimeException(e);}}// 连接方法public static Connection getConnection(){try {if(con == null || con.isClosed()){con = DriverManager.getConnection(url,username,password);System.out.println(con+"数据库连接成功");}} catch (SQLException e) {throw new RuntimeException(e);}return con;}/*** 释放资源* @param rs 结果集对象* @param pre 预处理对象* @param conn 连接数据库对象*/public static void close(ResultSet rs, PreparedStatement pre, Connection conn){try {if (rs != null){rs.close();}if (pre != null){pre.close();}if (conn != null){conn.close();}System.out.println("资源已全部释放");} catch (SQLException e) {throw new RuntimeException(e);}}}
通用查询接口:BaseDao.java
package dao;import pojo.User;import java.util.List;// 定义基本的增、删、改、查
public interface BaseDao {/** @param String sql,Object args:* 执行通用的增、删、改 功能* @return row 受影响的行数*/int executeUpdate(String sql, Object... args);/** @param String sql:* 查询表中所有数据并保存到集合中*/List<User> executeSelect(String sql,Object... args);
}
通用查询接口实现类
package dao.impl;import dao.BaseDao;
import pojo.User;
import util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;// 定义基本的增、删、改、查
public class BaseDaoImpl implements BaseDao {private static Connection con = null;private static PreparedStatement ptmt = null;private static ResultSet rs = null;/** @param String sql,Objectargs:* 执行通用的增、删、改 功能* @return row 受影响的行数* @author liu* @description TODO* @date 2024/5/25 18:13*/@Overridepublic int executeUpdate(String sql, Object... args){int row = 0;con = DBUtil.getConnection();try {// 开启事务con.setAutoCommit(false);// 预编译ptmt = con.prepareStatement(sql);for (int i = 0; i < args.length; i++) {ptmt.setObject(i+1,args[i]);}row = ptmt.executeUpdate();if(row > 0){// 提交事务con.commit();}else{// 回滚事务con.rollback();}System.out.println("受影响的行数为:"+row);} catch (SQLException e) {// 发生异常,回滚事务try {con.rollback();} catch (SQLException ex) {throw new RuntimeException(ex);}throw new RuntimeException(e);}finally {// 释放资源DBUtil.close(rs,ptmt,con);}return row;}/** @param String sql:* 查询表中所有数据并保存到集合中* @return List* @author liu* @description TODO* @date 2024/5/25 18:24*/@Overridepublic List<User> executeSelect(String sql,Object... args){System.out.println("===查询操作===");con = DBUtil.getConnection();List users = new ArrayList();try {ptmt = con.prepareStatement(sql);for (int i = 0; i < args.length; i++) {ptmt.setObject(i+1,args[i]);}rs = ptmt.executeQuery();while (rs.next()) {int id = rs.getInt(1);String username = rs.getString(2);String password = rs.getString(3);User user = new User(id,username,password);users.add(user);}} catch (SQLException e) {throw new RuntimeException(e);}finally {// 释放资源DBUtil.close(rs,ptmt,con);}return users;}}