对于 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)
求大神请教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
PrepareStatement的使用流程如下:
使用占位符SQL实例化
调用bindXX方法完成参数绑定
调用executeUpdate或executeQuery方法,这里不传参数了,因为参数都在1、2步处理了
你上面已经把sql传给pst了 干嘛还要传给executQuery呢?
你的psr.executeQuery(sql),已经传了参数得到结果集了,,不用再传参数了,,
PreparedStatement 类是用与预处理sql语句的。
例如:
`ResultSet rs = null;
PreparedStatement loginStatement =
?表示占位符,我们可以使用setString(int, String) 等方法来为占位符设置值。其中int 参数为第几个占位符(注意不是从0开始,是数学的第几个)第二个表示参数是我们将要把对应占位符(?)替换的值。这样做可以避免我们的数据库被sql注入。值得注意的是,sql语句关键字不可以被占位符替代,因为占位符会自动为我们指定的String用单引号包裹导致sql语句执行失败。手机码的将就看看