• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jspでデータベースにレコード追加)

jspでデータベースにレコード追加

aozakana_dhaの回答

回答No.1

strCompany の左側と strAddress の両側にカンマが無いように見えます。 またこのような方法でSQLを組み立てるのは望ましい方法ではありません。 preparedStatementでプレースホルダを使用しましょう。

garigarisama
質問者

補足

ありがとうございます。 色々調べて、セキュリティや効率の観点で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"/>

関連するQ&A

  • ブラウザ上に表示されたデータベースに追加

    タイトルのことをしようとすると、「java.lang.NullPointerException」というエラーが出ますが、これを解消するにはどうすればよいのでしょうか? そのエラーがでるページのソースを上げておきます。 <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.sql.*" %> <%! //toUnicodeメソッドの定義 public String toUnicode(String s) throws java.io.UnsupportedEncodingException { return (new String(s.getBytes("8859_1"), "JISAutoDetect")); } %> <% //JDBCドライバのロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //データベースへ接続 String jdbcUrl = "jdbc:odbc:AnsSheet"; String user = "root"; String password = "progressive"; Connection con = DriverManager.getConnection(jdbcUrl,user,password); //SQL実行 Statement stmt = con.createStatement (); String sql = "INSERT INTO AnsSheet (問題, a, b, c, d, e, f) VALUES("; sql = sql + "'" + toUnicode(request.getParameter("問題")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("a")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("b")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("c")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("d")) + "',"; sql = sql + "'" + toUnicode(request.getParameter("e")) + "',"; sql = sql + toUnicode(request.getParameter("f")) + ")"; int cnt = stmt.executeUpdate(sql); //接続解除 stmt.close(); con.close(); %> <jsp:forward page="keepAnsSheet.jsp" />

  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • JDBC + JAVA Servlet、JSP、でMysqlのレコード更新、レコード参照について

     標記につき勉強中ですが素人です。何とか道筋を教えて下さい。宜しくオ願いします。  http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_05.htmを懸命に見ています。 以下  ■MySQL JDBC + JAVA Servlet、JSP レコード更新 ・レコード追加で、日本語データが指定できるかテストする。 問題なく追加できる。 <%@ page import="java.util.*,java.sql.*;" contentType="text/html; charset=Shift_JIS"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>JAVA Server Page(JSP) - MySQL JDBC Test</TITLE> </HEAD> <BODY> <P>JAVA Server Page(JSP) - MySQL JDBC Test</P> <% String drv = "com.mysql.jdbc.Driver"; String dsn = "jdbc:MySQL://localhost:3306/sak?user=sak&password="; Connection cn = null; Statement st = null; ResultSet rs = null; // MySQL JDBC ドライバロード 以下 ここで説明しているのは上記をJSPで記述すれば動作するということなのでしょうか、お教え下さい。 前提条件が良く分からないのです。或いは何が分からないのか良く分からないレベルです。 多分上記をaaa.JSPに作ればコンパイルされるので動くということかなと考えています。 コンテキスト、Web.Xml、Jap、Java、ViewBeanの関係が分かりません何とか御願致します。

  • JSPからデータベースへのアクセス

    質問させて頂きます。 下のサイトを参考にJSPからDBにアクセスする練習をしてるのですが、 思うように動きません。 http://www.fk.urban.ne.jp/home/kishida/kouza/shop/shop.html 同じようにDBにはAccessを利用。ODBCも設定を行いました。 tomcatの設定は他のJSPやサーブレットが動くので問題ないと 考えています。 サンプルをそのままコピーして、実行するとエラーがでます。 HTTPステータス500 The server encountered an internal error () that prevented it from fulfilling this request. org.apache.jasper.JasperException: JSPのクラスをロードできません org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:598) org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:147) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) JSPソース <%@page contentType="text/html; charset=Shift_JIS"%> <html> <head><title>商品一覧</title></head> <body> <%@page import="java.sql.*"%> <h1>商品一覧</h1> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection("jdbc:odbc:sampleshop"); Statement stmt = conn.createStatement(); String sql = "select * from t_shohin order by shohin_code"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ out.print(rs.getString("shohin_name")); out.print(" - "); out.print(rs.getInt("price") + "円"); out.println("<br>"); } conn.close(); %> </body> </html> ご回答よろしくお願いします。

  • [JAVA]Servlet → JSP 文字化け発生!

    こんばんわぁ♪ サーブレットにおきまして・・・ ErrMsg = "【認証エラー】MSP情報(キーコードorパスワード)が違います!"; response.sendRedirect("../F_LogInOut.jsp?ErrMsg=" + ErrMsg); とJSPに接続します。 JSPでは・・・ <%@ page contentType="text/html; charset=Shift_JIS" %> とし、 <% if (request.getParameter("ErrMsg") != null){ out.println(request.getParameter("ErrMsg")); } %> とこれを表示します。 しかし、うまく表示できません・・・ 何ででしょうか? お願いします、お教えください。

    • ベストアンサー
    • Java
  • DBにかな情報が登録できません(JSP)

    <%@ page contentType="text/html; charset=SHIFT_JIS" import="java.sql.*,javax.naming.*,javax.sql.*,java.util.*" %> <%@ page import = "java.util.Date" %> <%@ page import = "java.text.DateFormat" %> <%@ page import = "java.text.SimpleDateFormat" %> <%@page import="java.text.NumberFormat" %> <% request.setCharacterEncoding("SHIFT_JIS"); %> <% Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/workshop"); Connection db=ds.getConnection(); String name = request.getParameter("Name"); String busyo = request.getParameter("Shozoku"); PreparedStatement prdStt3=db.prepareStatement("INSERT INTO Rireki (Name,Busyo) VALUES(?,?)"); prdStt3.setString(1,name); prdStt3.setString(2,busyo);; prdStt3.executeUpdate(); out.println("名前:" + name + "<BR>"); out.println("所属部署:" + busyo + "<BR>"); prdStt3.close(); db.close(); %> ========================== 【環境】 Webサーバ:Tomcat5.5,apache2.0.49 DB:MySQL4.1 JAVA:JDK1.5.0.7 ========================== 上記ソースでDBに情報を書き込もうとしましたが、うまくいきません。 半角英数字は登録できますが、かなは全角・半角ともに登録されていないようです。 パラメータに値そのものは入っているらしく、printlnで出力したところ、画面上で入力情報を確認出来ました。 どなたかお気づきの点がありましたら是非ともアドバイス下さい。 お願いいたします。

    • ベストアンサー
    • Java
  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • jspとsqlの連結したページ

    <%@ page import="java.sql.*" %> <% //パラメータの取得 String keyword = request.getParameter("keyword"); //ドライバーのロード Class.forName("com.mysql.jdbc.Driver"); //DBに接続 String url = "jdbc:mysql://localhost/java4z?useUnicode=true&characterEncoding=MS932"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ; ResultSet rs = stmt.executeQuery(sql);%> jspとmysqlの連動したページを作っているのですが select count(*) from テーブル名;を使い 件数を表示(XX件目など)させたいのです さらに値段からXX円以上からXX円以下なども データから検索し表示させたいのですが String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;の部分をどのように記述すればよいか 解かりません! どなたかお願いします☆()

    • ベストアンサー
    • MySQL
  • ServletとJSPで。。。

    省略してますが、下記の記述で JSPの----部分の記述方法がわかりません。 実際、実行できる環境だといいのですが、今は実行環境がないので調査できません。 まだなにもわからない状態なので、記述が正しいかも自信ありませんがよろしくお願いします。 =============Servlet==============================Schedulebean bean = new Schedulebean(); bean.setYear(request.getParameter("year")); bean.setMonth(request.getParameter("month")); request.setAttribute("bean", bean); request.getRequestDispatcher("/jsp/schedulefrm.jsp").forward(request,response); ============ JSP ================== <%@ page contentType = "text/html; charset=Shift_JIS"%> <jsp:useBean id="bean" scope="request" class="java.lang.String"/> <HTML> <FRAMESET FRAMESPACING="10" COLS="250,*"> <FRAME src="/jsp/calender.jsp?Year=<%= year % -------- ↑ >&Month=<%= month %>" --------- ↑    上記をid 取得する記述は? name = "left" scrolling = "no" NORESIZE /> <FRAME src="/jsp/schedule.jsp?Year=<%= year %>&Month=<%= month %>" name = "right" scrolling = "yes" /> </FRAMESET> </HTML>

    • ベストアンサー
    • Java