运行Java Swing+JDBC增删改查代码报AWT-EventQueue-0空指针异常求助
问题定位与修复方案
你遇到的空指针异常核心由以下2个常见错误导致,按优先级排查即可:
1. 首要问题:JDBC连接变量作用域错误
你在成员位置已经定义了Connection con;,但在Connect()方法中又重复声明了一个局部同名变量Connection con;,最终你赋值的是方法内的局部变量,类的成员变量con始终是null,后续执行con.prepareStatement时直接触发空指针。
修复代码:
public void Connect(){ try{ // 删除该行重复声明:Connection con; con = DriverManager.getConnection("jdbc:mysql://localhost:3306/gbproducts","root","root"); System.out.println("数据库连接成功"); }catch(SQLException ex){ ex.printStackTrace(); JOptionPane.showMessageDialog(null, "数据库连接失败:" + ex.getMessage()); } }
2. 次要问题:Swing组件未初始化
如果你是用IDE可视化拖拽生成的界面,需要确认所有组件(txtName、saveButton、txtPrice等)的变量名和你代码中声明的完全一致,IDE已经自动生成了组件初始化逻辑。如果组件未绑定,调用addActionListener或者getText时也会触发空指针。
3. 补充优化:空值校验逻辑
为了避免后续异常,操作前增加空值校验:
- 输入校验:用户点击按钮时先判断输入框是否为空
// 保存按钮逻辑中新增 String name = txtName.getText().trim(); String price = txtPrice.getText().trim(); String qty = txtQty.getText().trim(); if(name.isEmpty() || price.isEmpty() || qty.isEmpty()){ JOptionPane.showMessageDialog(null, "所有输入项不能为空"); return; } - 连接校验:执行SQL前先判断数据库连接是否有效
if(con == null){ JOptionPane.showMessageDialog(null, "数据库未连接,请检查配置"); return; }
4. 其他注意事项
确认项目中已经导入MySQL驱动依赖(mysql-connector-java),如果是低版本JDBC需要在getConnection前手动加载驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
内容的提问来源于stack exchange,提问作者bogdanis12
相关产品推荐
相关产品推荐

