Java自动化测试之数据库的操作
1. 导入依赖坐标
在Java项目中进行数据库操作时,首先需要在项目的pom.xml文件中添加相应的JDBC驱动依赖。以下是常见数据库的依赖配置示例:
MySQL数据库依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency>
Oracle数据库依赖
<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>21.5.0.0</version>
</dependency>
PostgreSQL数据库依赖
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.3.3</version>
</dependency>
详情见:Maven通过修改pom.xml配置文件下载指定依赖包,以及解决MVNRepository网站加载和验证问题的方法
2. 定义JDBC工具类
为了提高代码复用性和可维护性,我们可以创建一个JDBC工具类来封装常见的数据库操作。以下是完整的工具类实现示例:
import java.sql.*;public class JdbcUtil {// 数据库连接信息private static final String URL = "jdbc:mysql://localhost:3306/test_db";private static final String USER = "root";private static final String PASSWORD = "123456";// 加载驱动(JDBC 4.0+可以省略)static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取数据库连接*/public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USER, PASSWORD);}/*** 关闭连接资源*/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();}}/*** 执行查询SQL*/public static ResultSet executeQuery(String sql, Object... params) throws SQLException {Connection conn = getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);// 设置参数for (int i = 0; i < params.length; i++) {pstmt.setObject(i + 1, params[i]);}return pstmt.executeQuery();}/*** 执行更新SQL(增删改)*/public static int executeUpdate(String sql, Object... params) throws SQLException {Connection conn = getConnection();PreparedStatement pstmt = conn.prepareStatement(sql);// 设置参数for (int i = 0; i < params.length; i++) {pstmt.setObject(i + 1, params[i]);}int result = pstmt.executeUpdate();close(conn, pstmt, null);return result;}
}
3. 示例
3.1 查询示例
// 查询用户表中所有用户信息
String querySql = "SELECT * FROM users WHERE age > ?";
try {ResultSet rs = JdbcUtil.executeQuery(querySql, 18);while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");int age = rs.getInt("age");System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);}
} catch (SQLException e) {e.printStackTrace();
}
3.2 插入示例
// 插入新用户记录
String insertSql = "INSERT INTO users(name, age, email) VALUES(?, ?, ?)";
try {int rows = JdbcUtil.executeUpdate(insertSql, "张三", 25, "zhangsan@example.com");System.out.println("插入成功,影响行数: " + rows);
} catch (SQLException e) {e.printStackTrace();
}
3.3 更新示例
// 更新用户年龄
String updateSql = "UPDATE users SET age = ? WHERE id = ?";
try {int rows = JdbcUtil.executeUpdate(updateSql, 30, 1);System.out.println("更新成功,影响行数: " + rows);
} catch (SQLException e) {e.printStackTrace();
}
3.4 删除示例
// 删除用户记录
String deleteSql = "DELETE FROM users WHERE id = ?";
try {int rows = JdbcUtil.executeUpdate(deleteSql, 1);System.out.println("删除成功,影响行数: " + rows);
} catch (SQLException e) {e.printStackTrace();
}
