10.31
- 编写数据库连接工具类(DBUtil.java)
这个类是连接数据库的核心,封装了获取连接、关闭资源的方法,避免重复代码:
java
运行
package com.mes.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
-
数据库连接工具类(Java Bean封装)
*/
public class DBUtil {
// MySQL连接地址(mes_db是数据库名,useSSL=false避免SSL连接警告,serverTimezone=Asia/Shanghai设置时区)
private static final String URL = "jdbc:mysql://localhost:3306/mes_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
// 数据库用户名(默认root)
private static final String USER = "root";
// 数据库密码(替换为你的MySQL密码)
private static final String PASSWORD = "123456"; // 例如你的密码是123456/**
- 获取数据库连接
- @return 连接对象Connection
- @throws SQLException 数据库连接异常
*/
public static Connection getConnection() throws SQLException {
// 加载驱动(MySQL 8.0以上驱动类是com.mysql.cj.jdbc.Driver,5.x是com.mysql.jdbc.Driver)
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new SQLException("MySQL驱动加载失败!");
}
// 获取连接
return DriverManager.getConnection(URL, USER, PASSWORD);
}
/**
- 关闭数据库资源(ResultSet、PreparedStatement、Connection)
- @param rs 结果集
- @param ps 预编译语句
- @param conn 连接对象
*/
public static void closeResources(ResultSet rs, PreparedStatement ps, Connection conn) {
// 关闭顺序:先ResultSet,再PreparedStatement,最后Connection
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close(); // 关闭连接,释放资源
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
三、测试数据库连接是否成功
为了验证连接是否正确,我们可以编写一个测试类,尝试获取数据库连接:
java
运行
package com.mes.test;
import com.mes.util.DBUtil;
import java.sql.Connection;
import java.sql.SQLException;
public class DBTest {
public static void main(String[] args) {
Connection conn = null;
try {
// 调用DBUtil获取连接
conn = DBUtil.getConnection();
if (conn != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("连接出错:" + e.getMessage());
} finally {
// 关闭连接
DBUtil.closeResources(null, null, conn);
}
}
}
四、常见问题及解决方法
驱动加载失败
检查Class.forName("com.mysql.cj.jdbc.Driver")是否正确(MySQL 8.0 以上必须带cj)。
确认驱动 jar 包已放入WEB-INF/lib或 Maven 依赖正确。
连接地址错误
检查URL中的localhost:3306是否正确(MySQL 默认端口 3306,若修改过需对应)。
确认数据库名mes_db已创建。
用户名 / 密码错误
核对USER和PASSWORD是否与你的 MySQL 登录信息一致(默认用户root,密码是安装时设置的)。
时区错误
URL 中必须添加serverTimezone=Asia/Shanghai(MySQL 8.0 以上要求显式设置时区)。
五、后续使用(在 Servlet 中调用)
连接成功后,在 Servlet 中就可以通过DBUtil操作数据库了,例如提交日报时保存数据:
java
运行
// 示例:保存日报到数据库
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DBUtil.getConnection(); // 获取连接
String sql = "INSERT INTO mes_daily_report (production_batch, worker_id, worker_name, total_out, qualified, defective, lost, report_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
ps = conn.prepareStatement(sql);
// 设置参数(对应SQL中的?)
ps.setString(1, "24100130"); // 生产批次
ps.setString(2, "001030"); // 工号
ps.setString(3, "张三"); // 姓名
ps.setInt(4, 100); // 转出总数
ps.setInt(5, 90); // 合格数
ps.setInt(6, 5); // 次品数
ps.setInt(7, 5); // 丢失数
ps.setString(8, "2024-10-27"); // 上报日期
ps.executeUpdate(); // 执行插入
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closeResources(null, ps, conn); // 关闭资源
}
通过以上步骤,就完成了从 0 到 1 的数据库连接配置。核心是通过DBUtil类封装连接逻辑,确保代码复用和资源正确释放,为后续 MES 系统的 CRUD(增删改查)操作打下基础。

浙公网安备 33010602011771号