以下语句有两个问题:

  1. SQL语句中查询的是'sal',但是在while循环中获取的是'ename'和'sal',应该修改为获取'sal'字段的值。

  2. SQL语句中使用了占位符,但是在设置参数时,没有使用占位符,而是直接拼接字符串,应该使用占位符传入参数。

修改后的代码如下:

public void sqlZhang() throws SQLException {
        String sql = "SELECT sal FROM emp where ename like ?";
        PreparedStatement ps = conn.prepareStatement(sql);
        String str = "张%";
        ps.setString(1,str);
        ResultSet rs = ps.executeQuery();
        while (rs.next()){
            double sal = rs.getDouble("sal");
            System.out.println(sal);
        }
    }

代码分析:

  1. 查询字段不一致: 原代码中,SQL语句查询的是'sal'字段,但在循环中却尝试获取'ename'和'sal'两个字段的值,导致代码逻辑错误。修正后的代码中,只获取了'sal'字段的值。

  2. 参数设置错误: 原代码中使用了占位符'?', 但在设置参数时,直接拼接字符串,导致代码存在SQL注入风险。修正后的代码使用占位符设置参数,避免了潜在的SQL注入漏洞。

重要提醒: 始终使用占位符来设置SQL语句参数,以防止SQL注入攻击,确保代码的安全性。

Java SQL语句错误分析及修正 - 如何正确使用占位符

原文地址: http://www.cveoy.top/t/topic/oBIS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录