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

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)

求大神请教


莫回无
浏览 2731回答 4
4回答

Helenr

PrepareStatement的使用流程如下:使用占位符SQL实例化调用bindXX方法完成参数绑定调用executeUpdate或executeQuery方法,这里不传参数了,因为参数都在1、2步处理了

慕村9548890

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

蝴蝶不菲

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

幕布斯6054654

PreparedStatement 类是用与预处理sql语句的。例如:`ResultSet rs = null;PreparedStatement loginStatement =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sqlDAO.sqlConnection().prepareStatement("SELECT username,password FROM user_table WHERE username = ? AND password = ?");&nbsp; &nbsp; &nbsp; &nbsp; loginStatement.setString(1, username);&nbsp; &nbsp; &nbsp; &nbsp; loginStatement.setString(2, password);&nbsp; &nbsp; &nbsp; &nbsp; rs = loginStatement.executeQuery();`?表示占位符,我们可以使用setString(int, String) 等方法来为占位符设置值。其中int 参数为第几个占位符(注意不是从0开始,是数学的第几个)第二个表示参数是我们将要把对应占位符(?)替换的值。这样做可以避免我们的数据库被sql注入。值得注意的是,sql语句关键字不可以被占位符替代,因为占位符会自动为我们指定的String用单引号包裹导致sql语句执行失败。手机码的将就看看
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java