0

JSP ページとサーブレットは初めてで、サーブレットに update ステートメントがあります。ここにあります:

PreparedStatement checkDB = (PreparedStatement) con.prepareStatement(
        "UPDATE users set username=?,password=?,name=?,surname=?,phone=?,address," +
        "email=? where username=?");
        checkDB.setString(8,request.getParameter("tUserName"));
        checkDB.setString(1,request.getParameter("tUserName"));
        checkDB.setString(2,request.getParameter("tPassword"));
        checkDB.setString(3,request.getParameter("tName"));
        checkDB.setString(4,request.getParameter("tSurName"));
        checkDB.setString(5,request.getParameter("tPhone"));
        checkDB.setString(6,request.getParameter("tAddress"));
        checkDB.setString(7,request.getParameter("tEmail"));
        result= checkDB.executeUpdate();

実行すると、java.sql.SQLException: Parameter index out of range (8 > number of parameters、つまり 7) というエラーが発生します。どうすればこれを修正できますか?

ありがとう

4

1 に答える 1

3

あなたをチェックしてくださいPreparedStatement

PreparedStatement checkDB = (PreparedStatement) con.prepareStatement(
    "UPDATE users set username=?,password=?,name=?,surname=?,phone=?,address," +
    "email=? where username=?");

SQLには7つ?のプレースホルダーがあり、 PreparedStatement8つのパラメーターを設定しています。おそらく次のようになります。

PreparedStatement checkDB = (PreparedStatement) con.prepareStatement(
    "UPDATE users set username=?,password=?,name=?,surname=?,phone=?,"+
    "address=?," + //You missed =?, here
    "email=? where username=?");

=?,の後に付け忘れた可能性がありaddressます。

注: JSP は表示用です。ビジネス ロジックを記述しないでください。スクリプトレットの使用も避ける必要があります。ビジネスロジックを実行するコントローラーまたはサーブレットを用意します。

于 2013-07-02T07:53:55.223 に答える