- ベストアンサー
jspでデータベースにレコード追加
- jspでデータベースにレコードを追加する方法について
- 質問者がデータベースにレコード追加する際に発生しているエラーについて
- TomcatとMySQLを使用している環境でのデータベース操作についての質問
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
よかった、これからも頑張って! 経験値いっぱい貯めればエラーなんかもすぐ当たりが付くようになるよ。
その他の回答 (3)
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
まず、基本的なことを学んでからDBに手を出したほうがいいんじゃない? >db cannot be resolved >conn cannot be resolved to a variable >conn cannot be resolved 読んでそのままの意味。 そんな変数しらんわって言ってるの。 PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)"); dbってどこに宣言してるの? connをtry{}の中に入れたらfinally{}では使えないよ? 変数のスコープについて調べよう。 SQLに手を出す前の話だよ。 エラーメッセージはかなり親切。 それすら読み取ろうとしないならこの先上達しない。
補足
>>db cannot be resolved >>conn cannot be resolved to a variable >>conn cannot be resolved >読んでそのままの意味。 >そんな変数しらんわって言ってるの。 色んなサイトで調べてるうちに訳わからんようになってました。 dbから直前の行で宣言しているconnに修正すると上手くいきました。 >connをtry{}の中に入れたらfinally{}では使えないよ? >変数のスコープについて調べよう。 try, catch, finallyを少し調べると、ダメだった理由が分かりました。 全体的に下記のように修正し、例外処理など課題はまだありますが とりあえずの目的は達成できました。 ありがとうございました。 -------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*,java.util.*,java.text.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); String strConn= "jdbc:mysql://localhost/****" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); try{ PreparedStatement strSql=conn.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)"); strSql.setString(1,request.getParameter("name")); strSql.setString(2,request.getParameter("company")); strSql.setString(3,request.getParameter("address")); strSql.executeUpdate(); }catch(SQLException e){ out.println("コネクションがありません"); }finally{ conn.close(); } %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/>
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
エラー内容をまずは貼る。 エラーエラー言っても何のエラーかわかるだけで回答しやすい。 PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)"); strSql.setString(1,request.getParameter("id")); strSql.setString(2,request.getParameter("name")); strSql.setString(3,request.getParameter("company")); strSql.setString(4,request.getParameter("address")); で、?の数とセットしている数がおかしいのは気づかない? あと例外処理がどうおこなわれてるかわからないけど コネクションとかのリソースの開放をfinally内で実行したほうがいいよ。
補足
ご指摘ありがとうございます。 >で、?の数とセットしている数がおかしいのは気づかない? すみません、直しましたがそれでもエラーが出てしまいます。 ※内容は以下です。 >あと例外処理がどうおこなわれてるかわからないけど コネクションとかのリソースの開放をfinally内で実行したほうがいいよ。 こちらも追加してみましたが、やはりエラーが出ます。 お手数ですが、ご教示お願いします。 <エラー内容>------------------------------------------- type 例外レポート メッセージ JSPのクラスをコンパイルできません: 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /hhh/add_person2.jsp の中の25行目でエラーが発生しました db cannot be resolved 22: Connection conn = DriverManager.getConnection(strConn); 23: 24: //プレースホルダで SQL 作成 25: PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)"); 26: //SQLコマンド文字列を作成 27: strSql.setString(1,request.getParameter("id")); 28: strSql.setString(2,request.getParameter("name")); JSPファイル: /hhh/add_person2.jsp の中の39行目でエラーが発生しました conn cannot be resolved to a variable 36: 37: }finally{ 38: try{ 39: if(conn!=null){conn.close();} 40: }catch(SQLException e){ 41: e.printStackTrace(); 42: } JSPファイル: /hhh/add_person2.jsp の中の39行目でエラーが発生しました conn cannot be resolved 36: 37: }finally{ 38: try{ 39: if(conn!=null){conn.close();} 40: }catch(SQLException e){ 41: e.printStackTrace(); 42: } Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:446) org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) org.apache.jasper.compiler.Compiler.compile(Compiler.java:336) org.apache.jasper.compiler.Compiler.compile(Compiler.java:323) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) <ソースコード>------------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*,java.util.*,java.text.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); try{ String strConn= "jdbc:mysql://localhost/****" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?,?)"); strSql.setString(1,request.getParameter("id")); strSql.setString(2,request.getParameter("name")); strSql.setString(3,request.getParameter("company")); strSql.setString(4,request.getParameter("address")); strSql.executeUpdate(); }catch(SQLException e){ out.println("コネクションがありません"); }finally{ try{ if(conn!=null){conn.close();} }catch(SQLException e){ e.printStackTrace(); } } %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/>
- aozakana_dha
- ベストアンサー率45% (76/168)
strCompany の左側と strAddress の両側にカンマが無いように見えます。 またこのような方法でSQLを組み立てるのは望ましい方法ではありません。 preparedStatementでプレースホルダを使用しましょう。
補足
ありがとうございます。 色々調べて、セキュリティや効率の観点でpreparedStatementで組むのが良いと 理解しました。 ですが、前述のコードをpreparedStatementで作成したところ、 エラーになってしまいます。 色々試してロジックとしても、おかしくはないかと思っていますが 間違いなどありましたら、またご指摘お願いします。 -------------------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*,java.util.*,java.text.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); String strConn= "jdbc:mysql://localhost/****" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); PreparedStatement strSql=db.prepareStatement("INSERT INTO person(name,company,address) VALUES(?,?,?)"); strSql.setString(1,request.getParameter("id")); strSql.setString(2,request.getParameter("name")); strSql.setString(3,request.getParameter("company")); strSql.setString(4,request.getParameter("address")); strSql.executeUpdate(); conn.close(); %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/>
お礼
ありがとうございます。 励みになります!!