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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:19