You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package dao;
import java.sql.*;
/**
* 数据库工具类
* 学号2023210480 姓名:倪思羽
*/
public class DbUtil {
private Connection conn = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
// 数据库连接配置已改为postgres数据库对应你新建的表
private static final String URL = "jdbc:postgresql://localhost:5432/postgres";
private static final String USER = "postgres";
private static final String PASSWORD = "123456"; // 你的数据库密码
/**
* 获取数据库连接(非静态方法)
*/
public Connection getConnection() {
try {
if (conn == null || conn.isClosed()) {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("连接对象创建成功:" + conn); // 新增:打印连接对象,辅助排查
}
} catch (ClassNotFoundException e) {
System.out.println("❌ 驱动加载失败找不到PostgreSQL JDBC驱动");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("❌ 数据库连接失败URL/用户名/密码错误,或数据库未启动");
e.printStackTrace();
} catch (Exception e) {
System.out.println("❌ 未知异常导致连接失败");
e.printStackTrace();
}
return conn;
}
/**
* 执行查询
*/
public ResultSet executeQuery(String sql, Object... params) {
try {
ps = getConnection().prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
rs = ps.executeQuery();
} catch (SQLException e) {
System.out.println("❌ 执行查询失败");
e.printStackTrace();
}
return rs;
}
/**
* 执行更新(插入/修改/删除)
*/
public int executeUpdate(String sql, Object... params) {
try {
ps = getConnection().prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
int rows = ps.executeUpdate();
System.out.println("✅ 执行更新成功,影响行数:" + rows);
return rows;
} catch (SQLException e) {
System.out.println("❌ 执行更新失败");
e.printStackTrace();
return -1;
}
}
/**
* 关闭资源
*/
public void closeResources() {
try {
if (rs != null) rs.close();
if (ps != null) ps.close();
if (conn != null) conn.close();
System.out.println("✅ 资源关闭成功");
} catch (SQLException e) {
System.out.println("❌ 资源关闭失败");
e.printStackTrace();
}
}
/**
* 测试主方法:全量验证连接、查询、插入功能
*/
public static void main(String[] args) {
// 1. 创建DbUtil实例解决静态调用非静态方法的核心
DbUtil dbUtil = new DbUtil();
// 2. 测试数据库连接
System.out.println("===== 测试1数据库连接 =====");
Connection conn = dbUtil.getConnection();
if (conn != null) {
System.out.println("✅ 数据库连接成功!");
} else {
System.out.println("❌ 数据库连接失败!");
return; // 连接失败,后续测试无需执行
}
// 3. 测试插入数据往你的customer_cstatm2023210480表插测试数据
System.out.println("\n===== 测试2插入数据 =====");
String insertSql = "INSERT INTO customer_cstatm2023210480 (cid, cname, cpin, ldatetime, lftimes, lstimes) VALUES (?, ?, ?, ?, ?, ?)";
// 插入你的学号数据避免重复插入可改cid为2023210481
dbUtil.executeUpdate(insertSql, "2023210481", "倪思羽测试", "123456", new Date(System.currentTimeMillis()), 0, 0);
// 4. 测试查询数据(查询刚插入的表数据)
System.out.println("\n===== 测试3查询数据 =====");
String querySql = "SELECT * FROM customer_cstatm2023210480 WHERE cid = ?";
ResultSet rs = dbUtil.executeQuery(querySql, "2023210481");
try {
if (rs.next()) {
System.out.println("✅ 查询到数据:");
System.out.println("账号(cid)" + rs.getString("cid"));
System.out.println("姓名(cname)" + rs.getString("cname"));
System.out.println("密码(cpin)" + rs.getString("cpin"));
System.out.println("失败次数(lftimes)" + rs.getInt("lftimes"));
} else {
System.out.println("❌ 未查询到指定数据");
}
} catch (SQLException e) {
System.out.println("❌ 查询数据解析失败");
e.printStackTrace();
}
// 5. 关闭资源
System.out.println("\n===== 测试4关闭资源 =====");
dbUtil.closeResources();
}
}