2012-10-22 136 views
4

我在嘗試從我的數據庫連接和檢索數據時遇到此類錯誤。executeQuery()方法不能在PreparedStatement或CallableStatement上引用參數。錯誤

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

刪除'executeUpdate()'調用。它會產生一個錯誤,因爲'PreparedStatement'不包含SQL更新語句。 – EJP

回答

8

創建的PreparedStatement你不需要查詢字符串第二次,因爲你 「告訴」 PreparedStatement的了與此字符串:

pstatement = connection.prepareStatement(queryString); 

這將是正確的做法:

pstatement = connection.prepareStatement(queryString); 
pstatement.setString(1, search); 
rs = pstatement.executeQuery(); 
+1

謝謝你的回覆。我試過這個建議,不幸的是它沒有在我的網上顯示我的數據庫中的任何數據。我認爲try子句中有錯誤。 -_- – Ching29

+0

@ Ching29更可能是查詢或數據庫出現問題或您的期望。 – EJP

+0

我已經得到了答案。我剛剛刪除了 int updateQuery = 0; 聲明。順便說一句,感謝您的幫助。^_ ^ – Ching29

2

嘗試

rs = pstatement.executeQuery(); 

您已經指定的查詢,而在

pstatement = connection.prepareStatement(queryString); 
+0

謝謝你的回覆。我試過你的建議,不幸的是它沒有在我的網上顯示我的數據庫中的任何數據。 -_- – Ching29

1

只需添加{ }您querystring.i.e

String queryString = "{SELECT P_ID, lname, fname, mname FROM stu_info Where lname = ?}"; 

​​和executeUpdate()將兩者的工作。 executeQuery()只適用於您的過程返回結果集。

相關問題