java数据库操作工具类(DbUtils/SqlUtils)
获取数据库连接:获取数据库连接对象,用于执行 SQL 操作。关闭数据库资源close:关闭数据库连接、语句、结果集等资源,避免资源泄漏。执行查询操作:执行 SQL 查询语句,返回查询结果列表。执行更新操作:执行 SQL 更新语句,如 INSERT、UPDATE、DELETE,返回受影响的行数。批量更新操作:执行批量 SQL 更新操作,返回每次执行的结果数组。设置 SQL 参数:设置 SQL 语句的
依赖准备
在使用 DbUtils
之前,确保项目已经配置了所需的 JDBC 驱动。例如,如果连接的是 MySQL 数据库,可以在 Maven 项目中的 pom.xml
中添加以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
DbUtils 工具类实现
package com.example.utils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* DbUtils 工具类
* 提供常见的数据库操作方法
*/
public class DbUtils {
private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
private static final String DB_USER = "your_username";
private static final String DB_PASSWORD = "your_password";
// 加载数据库配置,最好通过配置文件加载
static {
try {
// 注册 JDBC 驱动
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
*
* @return 数据库连接对象
* @throws SQLException SQL 异常
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
}
/**
* 关闭数据库资源
*
* @param conn 数据库连接
* @param stmt SQL 语句
* @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) {
e.printStackTrace();
}
}
/**
* 执行查询操作
*
* @param sql SQL 查询语句
* @param params 查询参数
* @return 查询结果列表,每个结果是一个包含列名-列值对的 Map
* @throws SQLException SQL 异常
*/
public static List<List<Object>> executeQuery(String sql, Object... params) throws SQLException {
List<List<Object>> results = new ArrayList<>();
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// 设置参数
setParameters(pstmt, params);
try (ResultSet rs = pstmt.executeQuery()) {
int columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
List<Object> row = new ArrayList<>();
for (int i = 1; i <= columnCount; i++) {
row.add(rs.getObject(i));
}
results.add(row);
}
}
}
return results;
}
/**
* 执行更新操作(INSERT, UPDATE, DELETE)
*
* @param sql SQL 更新语句
* @param params 更新参数
* @return 受影响的行数
* @throws SQLException SQL 异常
*/
public static int executeUpdate(String sql, Object... params) throws SQLException {
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// 设置参数
setParameters(pstmt, params);
return pstmt.executeUpdate();
}
}
/**
* 执行批量更新操作
*
* @param sql SQL 更新语句
* @param params 参数列表,每个元素是一个参数数组
* @return 受影响的行数数组
* @throws SQLException SQL 异常
*/
public static int[] executeBatchUpdate(String sql, List<Object[]> params) throws SQLException {
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
for (Object[] paramSet : params) {
setParameters(pstmt, paramSet);
pstmt.addBatch();
}
return pstmt.executeBatch();
}
}
/**
* 设置 PreparedStatement 的参数
*
* @param pstmt PreparedStatement 对象
* @param params 参数数组
* @throws SQLException SQL 异常
*/
private static void setParameters(PreparedStatement pstmt, Object... params) throws SQLException {
if (params != null) {
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
}
}
/**
* 执行事务操作
*
* @param transaction 事务逻辑
* @throws SQLException SQL 异常
*/
public static void executeTransaction(Transaction transaction) throws SQLException {
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false); // 开始事务
transaction.run(conn);
conn.commit(); // 提交事务
} catch (SQLException e) {
if (conn != null) {
conn.rollback(); // 回滚事务
}
throw e;
} finally {
close(conn, null, null);
}
}
/**
* 事务接口
*/
@FunctionalInterface
public interface Transaction {
void run(Connection conn) throws SQLException;
}
}
主要功能简介
-
获取数据库连接:
getConnection
:获取数据库连接对象,用于执行 SQL 操作。
-
关闭数据库资源:
close
:关闭数据库连接、语句、结果集等资源,避免资源泄漏。
-
执行查询操作:
executeQuery
:执行 SQL 查询语句,返回查询结果列表。
-
执行更新操作:
executeUpdate
:执行 SQL 更新语句,如 INSERT、UPDATE、DELETE,返回受影响的行数。
-
批量更新操作:
executeBatchUpdate
:执行批量 SQL 更新操作,返回每次执行的结果数组。
-
设置 SQL 参数:
setParameters
:设置 SQL 语句的参数,用于 PreparedStatement。
-
执行事务操作:
executeTransaction
:执行带事务的操作,通过事务接口传递逻辑,支持事务的提交和回滚。
使用示例
import com.example.utils.DbUtils;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
public class DbUtilsTest {
public static void main(String[] args) {
String querySql = "SELECT * FROM users WHERE age > ?";
String updateSql = "UPDATE users SET age = ? WHERE name = ?";
String insertSql = "INSERT INTO users (name, age) VALUES (?, ?)";
try {
// 执行查询操作
List<List<Object>> results = DbUtils.executeQuery(querySql, 25);
for (List<Object> row : results) {
System.out.println(row);
}
// 执行更新操作
int rowsUpdated = DbUtils.executeUpdate(updateSql, 30, "John");
System.out.println("Rows updated: " + rowsUpdated);
// 执行批量更新操作
List<Object[]> batchParams = Arrays.asList(
new Object[]{"Alice", 28},
new Object[]{"Bob", 34}
);
int[] batchResults = DbUtils.executeBatchUpdate(insertSql, batchParams);
System.out.println("Batch update results: " + Arrays.toString(batchResults));
// 执行事务操作
DbUtils.executeTransaction(conn -> {
DbUtils.executeUpdate(insertSql, "Charlie", 40);
DbUtils.executeUpdate(insertSql, "Dave", 22);
});
System.out.println("Transaction completed successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
结论
DbUtils
工具类通过封装 JDBC 提供的数据库操作功能,简化了数据库连接管理、查询执行、数据更新等常见操作。该工具类支持事务操作,可以通过传入自定义的事务逻辑,方便地进行事务管理。这些方法提高了代码的可读性,减少了重复代码的编写,使得数据库操作更加简洁和高效。DbUtils
是一个非常实用的工具类,适用于各种 Java 应用程序中的数据库操作。
总结
Java数据库操作工具类是一种用于简化数据库操作的工具,常见的工具类有DbUtils和SqlUtils。
DbUtils是Apache Commons项目中的一个工具类库,提供了一系列静态方法来执行各种数据库操作。它可以帮助开发人员简化数据库操作的代码,提高开发效率。DbUtils主要提供了以下功能:
-
数据库连接管理:DbUtils可以帮助开发人员管理数据库连接,包括连接的创建、释放和管理。
-
SQL执行:DbUtils提供了执行SQL语句的方法,可以执行各种类型的SQL语句,包括查询、更新、删除等。
-
数据库事务管理:DbUtils可以帮助开发人员管理数据库的事务,包括事务的提交和回滚。
-
SQL查询结果处理:DbUtils提供了处理SQL查询结果的方法,可以将查询结果转换为Java对象或集合。
SqlUtils是一个简单的数据库操作工具类,提供了一些简单的方法来执行SQL语句。它的功能相对较少,主要包括以下几点:
-
数据库连接管理:SqlUtils可以帮助开发人员管理数据库连接,包括连接的创建、释放和管理。
-
SQL执行:SqlUtils提供了执行SQL语句的方法,可以执行各种类型的SQL语句,包括查询、更新、删除等。
-
SQL查询结果处理:SqlUtils提供了处理SQL查询结果的方法,可以将查询结果转换为Java对象或集合。
DbUtils和SqlUtils都是开源的工具类库,可以通过引入相应的jar包来使用。它们都可以在Java项目中简化数据库操作,提高开发效率,但DbUtils提供的功能更为丰富一些。选择使用哪个工具类取决于具体的需求和项目的规模。
更多推荐
所有评论(0)