对于 PreparedStatement ,executeQuery() 不能带有参数的错误

发布于 2022-09-03 00:37:48 字数 1601 浏览 9 评论 0

public ResultSet executeQuery(String sql){  
        ResultSet result=null;  
        ResultSet rs=null;  
        PreparedStatement pst=null;  
        try {  
          
            pst=con.prepareStatement(sql);  
            if(sqlValues!=null&&sqlValues.size()>0){  //当sql语句中存在占位符时  
                setSqlValues(pst,sqlValues);  
            }  
            
        rs=pst.executeQuery(sql);  
        result=(ResultSet) ResultSupport.toResult(rs);  //一定要在关闭数据库之前完成转换  
              
        } catch (SQLException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }finally{  
            this.closeAll(con, pst, rs);  
        }  
          
        return result;  
    }  

这是我调用的

public static int getworkeramount(){    
    DBHelper dh=new DBHelper();
    int x=0;    
    String sql=new String("select count(perno) from per");    
    ResultSet rs=dh.executeQuery(sql);    
    try{     
        rs.next();     
        x=rs.getInt(1);    
    }
    catch(Exception ex){     
    }    
    return x;   
}  

出现了这样的错误

com.microsoft.sqlserver.jdbc.SQLServerException: 对于 PreparedStatement 或      CallableStatement,方法 executeQuery() 不能带有参数。
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:1578)
at base.DBHelper.executeQuery(DBHelper.java:142)
at frm.Mainfrm.getworkeramount(Mainfrm.java:590)
at frm.Mainfrm.<init>(Mainfrm.java:18)
at frm.Mainfrm.main(Mainfrm.java:666)

求大神请教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜声 2022-09-10 00:37:48

PrepareStatement的使用流程如下:

  1. 使用占位符SQL实例化

  2. 调用bindXX方法完成参数绑定

  3. 调用executeUpdate或executeQuery方法,这里不传参数了,因为参数都在1、2步处理了

囍笑 2022-09-10 00:37:48

你上面已经把sql传给pst了 干嘛还要传给executQuery呢?

梦一生花开无言 2022-09-10 00:37:48

你的psr.executeQuery(sql),已经传了参数得到结果集了,,不用再传参数了,,

人生戏 2022-09-10 00:37:48

PreparedStatement 类是用与预处理sql语句的。
例如:
`ResultSet rs = null;
PreparedStatement loginStatement =

           sqlDAO.sqlConnection().prepareStatement("SELECT username,password FROM user_table WHERE username = ? AND password = ?");
        loginStatement.setString(1, username);
        loginStatement.setString(2, password);
        rs = loginStatement.executeQuery();`

?表示占位符,我们可以使用setString(int, String) 等方法来为占位符设置值。其中int 参数为第几个占位符(注意不是从0开始,是数学的第几个)第二个表示参数是我们将要把对应占位符(?)替换的值。这样做可以避免我们的数据库被sql注入。值得注意的是,sql语句关键字不可以被占位符替代,因为占位符会自动为我们指定的String用单引号包裹导致sql语句执行失败。手机码的将就看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文