程序员的知识教程库

网站首页 > 教程分享 正文

《JDBC》第13节:JDBC之自定义JdbcUtil操作数据库的工具类

henian88 2024-10-14 10:04:03 教程分享 12 ℃ 0 评论

前一小节介绍了JDBC之事务的使用,到目前为止,我们已经将JDBC中的常见知识点基本上介绍完了,这篇文章我们就自己来编写一个JDBC工具类,封装通用的新增、删除、更新、查询等方法,方便后续直接操作数据库。

1.1、获取数据库连接

操作数据库的第一步,就是要获取到数据库的连接,所以这里创建一个获取数据库连接的getConnection()方法。

package com.gitcode.jdbc.chapter13;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * @author ZhuYouBin
 * @version 1.0.0
 * @date 2024/6/29 08:36
 * @description JDBC 工具类
 */
public class JdbcUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/jdbc-study";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "root";

    /**
     * 获取数据库连接
     */
    public static Connection getConnection() {
        Connection conn;
        try {
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
            throw new RuntimeException("数据库连接获取失败!", e);
        }
        return conn;
    }

}

1.2、关闭连接资源

数据库资源使用完成之后,就需要将其关闭,以免资源的浪费,所以这里创建一个关闭资源连接的close()方法。

/**
 * 按照顺序,依次释放资源
 * @param conn 数据库连接对象
 * @param stmt 语句对象
 * @param rs 结果集对象
 */
public static void close(Connection conn, Statement stmt, ResultSet rs) {
    try {
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    } catch (SQLException e) {
        throw new RuntimeException("关闭数据库连接资源失败!", e);
    }
}

1.3、更新数据

/**
 * 执行更新
 *
 * @param sql    执行的SQL语句
 * @param params ?占位符参数
 * @return 返回执行更新记录数
 */
public static int executeUpdate(String sql, Object... params) {
    Connection conn = getConnection();
    PreparedStatement stmt = null;
    int result = 0;
    try {
        // 预编译语句
        stmt = conn.prepareStatement(sql);
        // 设置参数值
        for (int i = 0; i < params.length; i++) {
            stmt.setObject(i + 1, params[i]);
        }
        // 执行SQL语句
        result = stmt.executeUpdate();
    } catch (SQLException e) {
        throw new RuntimeException("执行SQL更新语句失败!", e);
    } finally {
        close(conn, stmt, null);
    }
    return result;
}

1.4、删除数据

删除数据的方法,可以直接复用更新的方法,只是传入的SQL语句是delete而已。

/**
 * 执行删除
 *
 * @param sql    执行的SQL语句
 * @param params ?占位符参数
 * @return 返回删除记录数
 */
public static int executeDelete(String sql, Object... params) {
    return executeUpdate(sql, params);
}

1.5、新增数据(单条)

单条新增数据的方法,也可以直接复用更新的方法,只是传入的SQL语句是insert而已。

/**
 * 执行新增
 *
 * @param sql    执行的SQL语句
 * @param params ?占位符参数
 * @return 返回执行记录数
 */
public static int executeInsert(String sql, Object... params) {
    return executeUpdate(sql, params);
}

1.6、批量新增

/**
 * 批量执行新增
 *
 * @param sql    执行的SQL语句
 * @param params ?占位符参数
 */
public static void batchInsert(String sql, List<Object[]> params) {
    Connection conn = getConnection();
    PreparedStatement stmt = null;
    try {
        // 预编译语句
        stmt = conn.prepareStatement(sql);
        // 设置参数值
        for (Object[] param : params) {
            for (int i = 0; i < param.length; i++) {
                stmt.setObject(i + 1, param[i]);
            }
            // 加入批处理
            stmt.addBatch();
        }
        // 执行SQL语句
        stmt.executeBatch();
    } catch (SQLException e) {
        throw new RuntimeException("执行SQL语句失败!", e);
    } finally {
        close(conn, stmt, null);
    }
}

1.7、查询数据

/**
 * 执行查询
 *
 * @param sql    执行的SQL语句
 * @param params ?占位符参数
 * @return 结果集对象
 */
public static ResultSet executeQuery(String sql, Object... params) {
    Connection conn = getConnection();
    PreparedStatement stmt;
    ResultSet rs = null;
    try {
        stmt = conn.prepareStatement(sql);
        // 设置参数值
        for (int i = 0; i < params.length; i++) {
            stmt.setObject(i + 1, params[i]);
        }
        // 执行SQL语句
        rs = stmt.executeQuery();
    } catch (SQLException e) {
        throw new RuntimeException("执行SQL语句失败!", e);
    }
    return rs;
}

1.8、源代码获取

源代码地址:

https://gitcode.com/qq_39826207/jdbc-study/tree/chapter-jdbc-13

今天就到这里,未完待续~~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表