You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Scene Builder文本框数据插入MySQL表时EventHandler报错排查

问题分析与修复方案

核心错误点

  • 提前执行SQL语句:在绑定任何参数前就调用了prepare.executeUpdate();,此时PreparedStatement的参数都未设置,必然触发SQL执行异常。
  • 日期类型处理错误:直接将日期对象转为String存入数据库,容易出现格式不匹配MySQL DATE类型的问题,应该用setDate方法直接传入数据库兼容的日期对象。
  • 数据库资源未释放:操作完成后未关闭PreparedStatement和Connection,可能导致连接泄漏。

修复后的完整代码

public void myPlanADDbtn() {
    Connection connect = null;
    PreparedStatement prepare = null;

    try {
        connect = Database.connectDB();

        if (myPlan_PlanTexField.getText().isEmpty() || myPlan_StartDateSet.getValue() == null ||
                myPlan_EndDateSet.getValue() == null) {
            showAlert("请填写所有必填项");
        } else if (myPlan_StartDateSet.getValue().isAfter(myPlan_EndDateSet.getValue())) {
            showAlert("日期无效!开始日期不能晚于结束日期");
        } else {
            String insertData = "INSERT INTO plan (plan,startDate,endDate,createdDate,status,planner) VALUES(?,?,?,?,?,?)";
            prepare = connect.prepareStatement(insertData);

            // 按顺序绑定参数
            prepare.setString(1, myPlan_PlanTexField.getText());
            // 将LocalDate转换为数据库兼容的java.sql.Date
            prepare.setDate(2, java.sql.Date.valueOf(myPlan_StartDateSet.getValue()));
            prepare.setDate(3, java.sql.Date.valueOf(myPlan_EndDateSet.getValue()));
            // 直接设置当前日期
            prepare.setDate(4, new java.sql.Date(System.currentTimeMillis()));
            prepare.setString(5, "Not Finished");
            prepare.setString(6, page_userName.getText());

            // 执行插入操作
            prepare.executeUpdate();
            myPlansShowData();
        }
    } catch (Exception e) {
        e.printStackTrace();
        showAlert("数据插入失败:" + e.getMessage());
    } finally {
        // 确保数据库资源被关闭
        try {
            if (prepare != null) prepare.close();
            if (connect != null) connect.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

补充说明

  1. 假设myPlan_StartDateSet.getValue()返回LocalDate类型,若为其他日期类型,需对应调整转换逻辑。
  2. 新增finally块强制关闭资源,避免连接池耗尽。
  3. 在catch块中添加具体错误提示,便于排查问题。

内容的提问来源于stack exchange,提问作者Ahmadullah Ahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:42:04