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

对于 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)

求大神请教


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


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


PrepareStatement的使用流程如下:

  1. 使用占位符SQL实例化

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

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


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语句执行失败。手机码的将就看看

【热门文章】
【热门文章】