13

データベースに接続してデータを取得しようとすると、この種のエラーが発生します。

メソッド 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);
    }

   }
4

3 に答える 3

17

これで文字列を PreparedStatement に「伝えた」ため、2 回目は queryString は必要ありません。

pstatement = connection.prepareStatement(queryString);

これは正しい方法です:

 pstatement = connection.prepareStatement(queryString);
 pstatement.setString(1, search);
 rs = pstatement.executeQuery();
于 2012-10-22T05:39:07.790 に答える
2

試す

 rs = pstatement.executeQuery();

で準備済みステートメントを作成するときに、既にクエリを指定しています

 pstatement = connection.prepareStatement(queryString);
于 2012-10-22T05:37:01.437 に答える
2

querystring.ie に追加するだけ{ }です

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

execute()executeUpdate()どちらも機能します。executeQuery()プロシージャが結果セットを返す場合にのみ機能します。

于 2013-10-24T06:55:54.167 に答える