質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

解決済

java.sql.SQLException: No value specified for parameter 7

l_l_l_l_l_l_l_l
l_l_l_l_l_l_l_l

総合スコア38

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

2回答

0グッド

0クリップ

17167閲覧

投稿2016/06/21 01:06

編集2016/06/21 01:56

###前提・実現したいこと
度々の質問失礼します。
表題にも表記してありますが、
java.sql.SQLException: No value specified for parameter 7
がよく分かりません。
下記にもソースを記載いたしますが、
7つ目のパラメータがないはずなのに
このようなエラーが出てしまいます。

###エラーメッセージ

HTTPステータス 500 - java.sql.SQLException: No value specified for parameter 7 type 例外レポート メッセージ java.sql.SQLException: No value specified for parameter 7 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: java.sql.SQLException: No value specified for parameter 7 servlet.user_edit.doPost(user_edit.java:68) javax.servlet.http.HttpServlet.service(HttpServlet.java:644) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 原因 java.sql.SQLException: No value specified for parameter 7 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2205) com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2185) com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2052) com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009) com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098) com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994) org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97) org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97) servlet.user_edit.doPost(user_edit.java:61) javax.servlet.http.HttpServlet.service(HttpServlet.java:644) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

###servlet

package servlet; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.sql.DataSource; @WebServlet("/user_edit") public class user_edit extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String userId = request.getParameter("user_id"); Connection con = null; PreparedStatement ps = null; String sql = null; ResultSet rs = null; // セッションを取得する HttpSession session = request.getSession(); // 変数の初期化 boolean userResult = false; if (session.getAttribute("userResult") != null) { userResult = (boolean) session.getAttribute("userResult"); } if (userResult) { try { // データベースの接続を確立 InitialContext initContext = new InitialContext(); DataSource ds = (DataSource) initContext .lookup("java:comp/env/jdbc/Library"); con = ds.getConnection(); // sql = "UPDATE user SET (first_name,last_name,first_name_kana,last_name_kana,user_id,password)=(?,?,?,?,?,?) WHERE user_id=?"; // UPDATE命令の準備 ps = con.prepareStatement(sql); // UPDATE命令にポストデータの内容をセット ps.setString(1, request.getParameter("first_name")); ps.setString(2, request.getParameter("last_name")); ps.setString(3, request.getParameter("first_name_kana")); ps.setString(4, request.getParameter("last_name_kana")); ps.setString(5, request.getParameter("user_id")); ps.setString(6, request.getParameter("password")); ps.setString(7, userId); // UPDATE命令を実行 ps.executeUpdate(); // UPDATE命令後の画面遷移 this.getServletContext().getRequestDispatcher("/user_edit.jsp") .forward(request, response); } catch (Exception e) { throw new ServletException(e); } finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (con != null) { con.close(); } } catch (Exception e) { } } } else { // エラーメッセージをリクエスト格納 request.setAttribute("errorMessage", "ログインが行われていません。"); // ログイン画面遷移 this.getServletContext().getRequestDispatcher("/Login.jsp") .forward(request, response); } } }

###追記
javaファイルを変更しましたら下記のエラーが出てしまいました

↓ ↓ ↓ ↓ ↓
HTTPステータス 500 - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(first_name,last_name,first_name_kana,last_name_kana,user_id,password)=('aa','aa' at line 1
type 例外レポート

メッセージ com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(first_name,last_name,first_name_kana,last_name_kana,user_id,password)=('aa','aa' at line 1

説明 The server encountered an internal error that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(first_name,last_name,first_name_kana,last_name_kana,user_id,password)=('aa','aa' at line 1
servlet.user_edit.doPost(user_edit.java:69)
javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
原因

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(first_name,last_name,first_name_kana,last_name_kana,user_id,password)=('aa','aa' at line 1
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:422)
com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
com.mysql.jdbc.Util.getInstance(Util.java:387)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97)
org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97)
servlet.user_edit.doPost(user_edit.java:62)
javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

ベストアンサー

Java

1// SQL 2sql = "UPDATE user SET (first_name,last_name,first_name_kana,last_name_kana," 3 + "user_id,password)=(?,?,?,?,?,?) WHERE user_id=?";

このクエリ、「?」が7つありますよね?
ps.setStringでセットしているの6つ目までしかないからです。

投稿2016/06/21 01:10

masaya_ohashi

総合スコア9198

attakei👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

l_l_l_l_l_l_l_l

2016/06/21 01:30

最後の”WHERE user_id=?”の?も入るんですね
l_l_l_l_l_l_l_l

2016/06/21 01:57

有難う御座いました! 質問文を追記したので良かったら見てください。
masaya_ohashi

2016/06/21 02:12

SQL文に誤りがあるエラーです。UPDATEのSQL文をどう変えたか追記してください。
l_l_l_l_l_l_l_l

2016/06/21 02:21

解決しました! 原因はSQLのスペースが開いてなったからでした。

0

prepareStatementの?の数とsetStringで設定しているパラメータ数があってないのでは。

投稿2016/06/21 01:10

mty.ad

総合スコア145

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

l_l_l_l_l_l_l_l

2016/06/21 01:31

WHERE user_id=?の?は入らないと勝手に思っていました!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。