为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2019-03-06 14:15:21
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)求大神请教
查看完整描述

4 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

PrepareStatement的使用流程如下:

  1. 使用占位符SQL实例化

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

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


查看完整回答
反对 回复 2019-04-21
?
慕村9548890

TA贡献1884条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-21
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-21
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-04-21
  • 4 回答
  • 0 关注
  • 2730 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信