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

JavaFX表单输入插入数据库报InvocationTargetException如何解决?

代码错误点汇总及修复方案

1 空指针报错(NullPointerException)根本原因

  • 首先确认Controller中所有@FXML注解的控件和FXML文件中对应控件的fx:id完全一致,只要有一个控件的fx:id和变量名不匹配,该控件变量就会为null,调用getText()、getValue()等方法时就会触发空指针,你可以在报错的第73行位置打断点,排查具体哪个变量为null。
  • 若DatePicker控件用户未选择日期时直接调用getValue()会返回null,没有做非空校验直接使用也会触发空指针,建议添加必填校验逻辑,用户未填写对应字段时先弹出提示拦截,不要直接执行数据库操作。

2 逻辑错误汇总

2.1 驱动加载顺序&驱动类错误

  • 驱动加载要放在获取数据库连接之前,正确顺序是先执行Class.forName再调用DriverManager.getConnection。
  • 如果你使用的是MySQL 8.0以上版本的JDBC驱动,旧的com.mysql.jdbc.Driver已经废弃,要替换为com.mysql.cj.jdbc.Driver,同时JDBC URL建议加上时区参数避免时间报错:jdbc:mysql://localhost/medibase?serverTimezone=Asia/Shanghai。

2.2 控件取值逻辑完全错误

  • 手机号取值错误:phone.getColumns()是获取TextField的列宽属性值,不是用户输入的手机号内容,正确写法是phone.getText(),另外手机号一般为11位,超过了int类型的存储上限(int最大值为2147483647,仅10位),建议数据库中该字段改为varchar类型,直接存储字符串即可,不需要转数字。
  • 日期取值错误:date.getPromptText()是获取DatePicker的提示占位文字(比如你设置的“请选择日期”这类提示),不是用户选择的日期,正确写法是date.getValue(),返回LocalDate类型,可以转成java.sql.Date或者格式化后字符串存入数据库。

2.3 SQL参数顺序错误

你INSERT语句的字段顺序为:Patient_Name,Patient_ID,Docter_Name,Patient_Phone,App_Date,Covid_Note,App_time,但你设置参数的顺序把日期和时间搞反了:

  • 第5个参数你设置的是atime(预约时间),但第5个字段是App_Date(预约日期)
  • 第7个参数你设置的是appdate(预约日期),但第7个字段是App_time(预约时间)
    需要调整参数顺序,和字段顺序一一对应。

2.4 拼写风险

  • 预约的正确拼写是appointment,你写的appoinment少了一个t,医生的正确拼写是Doctor,你写的Docter少了一个c,如果数据库表名、字段名是正确拼写,你SQL里的名称和数据库不一致也会执行失败。

2.5 资源泄漏问题

Connection、PreparedStatement属于数据库资源,使用完后必须关闭,建议使用try-with-resources语法自动关闭资源,避免资源泄漏。


内容的提问来源于stack exchange,提问作者Banchi Secret

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:45:03