10.31

  1. 编写数据库连接工具类(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(增删改查)操作打下基础。

posted @ 2025-11-09 22:05  muyuxiaxing  阅读(3)  评论(0)    收藏  举报