尝试连接和检索数据库中的数据时出现此类错误。
方法executeQuery()不能在PreparedStatement或CallableStatement上获取参数。
我的代码是这样的。
String search = request.getParameter("searchstudent");
out.println(search);
String connectionURL = "jdbc:sqlserver://localhost:1433;databaseName=Chingdb; integratedSecurity=true;";
Connection connection = null;
PreparedStatement pstatement = null;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ResultSet rs = null;
int updateQuery = 0;
if(request.getParameter("editstudent")!= null){
try {
connection = DriverManager.getConnection(connectionURL, "root", "root");
String queryString = "SELECT P_ID, lname, fname, mname FROM stu_info Where lname = ?";
pstatement = connection.prepareStatement(queryString);
pstatement.setString(1, search);
rs = pstatement.executeQuery(queryString);
updateQuery = pstatement.executeUpdate();
%>
<TABLE cellpadding="15" border="1" style="background-color: #ffffcc;">
<%
while (rs.next()) {
%>
<TR>
<TD><%=rs.getInt(1)%></TD>
<TD><%=rs.getString(2)%></TD>
<TD><%=rs.getString(3)%></TD>
<TD><%=rs.getString(4)%></TD>
</TR></TABLE>
<%
rs.close();
pstatement.close();
connection.close();
}
}
catch(Exception e){
out.println(e);
}
}
答案 0 :(得分:12)
你第二次不需要queryString,因为你用这个“告诉”preparedStatement字符串:
pstatement = connection.prepareStatement(queryString);
这将是正确的方式:
pstatement = connection.prepareStatement(queryString);
pstatement.setString(1, search);
rs = pstatement.executeQuery();
答案 1 :(得分:2)
试
rs = pstatement.executeQuery();
您在
中创建预备文件时已经指定了查询 pstatement = connection.prepareStatement(queryString);
答案 2 :(得分:1)
只需为您的querystring.i.e添加{ }
String queryString = "{SELECT P_ID, lname, fname, mname FROM stu_info Where lname = ?}";
execute()
和executeUpdate()
都有效。 executeQuery()
仅在过程返回结果集时有效。