NetBeans开发大学项目时持续出现java.sql.SQLSyntaxErrorException警告如何解决?
解决java.sql.SQLSyntaxErrorException的方案
直接错误原因
你的SQL语句存在两处语法问题:
- 表名写法错误:
SELECT * FROM STUDENT TABLE里多了多余的TABLE关键字,正确的表名应该是STUDENT(请确认你的数据库表名确实为此)。 - 整数类型的id被错误包裹单引号:
id ='"+stdId+"'中,stdId是整数类型,单引号会将其转为字符串,和数据库中整数类型的id列匹配时会触发语法错误,同时还存在SQL注入风险。
修正后的代码
推荐使用 PreparedStatement 重构代码,既解决语法问题,又避免SQL注入:
try { // 使用PreparedStatement替代Statement,预编译SQL语句 String sql = "SELECT * FROM STUDENT WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); // 设置参数,参数索引从1开始 pstmt.setInt(1, Integer.parseInt(id.getText())); rs = pstmt.executeQuery(); if(rs.next()){ name.setText(rs.getString("stdName")); FatherName.setText(rs.getString("stdFatherName")); City.setText(rs.getString("stdCity")); blood.setText(rs.getString("stdBlood")); phone.setText(rs.getString("stdPhone")); stdkelas.setText(String.format("%s", rs.getInt("Class"))); } else { JOptionPane.showMessageDialog(null, "Record Not Found"); } // 及时关闭资源,避免泄漏 pstmt.close(); } catch(HeadlessException | NumberFormatException | SQLException e) { JOptionPane.showMessageDialog(null, e); }
额外注意事项
- 如果你的数据库表名包含特殊字符或空格,需要用对应数据库的标识符包裹(比如MySQL用反引号`,Oracle用双引号")。
- 数据库操作完成后,建议依次关闭
ResultSet、PreparedStatement和Connection资源。
内容的提问来源于stack exchange,提问作者Rafi Raihan Ikbar
相关产品推荐
相关产品推荐

