質問編集履歴

2 追記

manmos

manmos score 53

2016/02/26 00:17  投稿

jsp→servlet→daoの流れでMysqlへレコードの追加
現在servlet&jspの学習の一環で、jspにて入力した情報をもとにMysqlのDBへレコードを追加する方法を調べているのですが、どうにもうまくいきません。
まずjspが
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content=
"width=device-width, initial-scale=1">
<script type="text/javascript">
</script>
<title>登録</title>
</head>
<body>
<h1>登録</h1>
<form action="./Syousai" method="post">
氏名<input type="text" name="Name" size="20" maxlength="20"><br>   
生年月日<input type="text" name="BirthDay" size="10" maxlength="10"><br>
性別<input type="radio" name="性別" value="0" /> 男
<input type="radio" name="性別" value="1" /> 女<br>
(略)
 <input type="submit" value="登録" />
</form>
</body>
</html>
と、名前やその他の情報を入力できるようにしています。
次にservletが、
package servlet;
import java.io.IOException;
import java.util.ArrayList;
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 Dao.listDao;
import dto.Listinfo;
/**
* Servlet implementation class Insert
*/
@WebServlet("/Insert")
public class Insert extends HttpServlet {
   private static final long serialVersionUID = 1L;
   
   protected void doGet(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       
       listDao daoArray = new listDao();
       ArrayList<Listinfo> listInfo = daoArray.findAll(null);
       request.setAttribute("list", listInfo);
       request.getRequestDispatcher("/WEB-INF/jsp/Insert.jsp").forward(request,
               response);
   }
   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //   HttpSession session = request.getSession();
   
       request.setCharacterEncoding("UTF-8");   //UTF-8にエンコーディング
       
       String name = request.getParameter("Name");
       String birthday = request.getParameter("BirthDay");
       String sex = request.getParameter("性別");
       
       
       listDao dao = new listDao();       //Daoクラス生成
       dao.InsertInformation(employeeId, name, name_hiragana, birthday, sex, mail_address, teliphone_number, company_id, business_maneger, department, commissioning_status, enter_date, retire_date, status);   //挿入処理}
       
response.sendRedirect("./List");//レコード追加後、入力画面の前の一覧へもどる
}
}
と、jspから情報を取得し、daoへ渡します。
最後にDao内のメソッドで
package Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import dto.Listinfo; //(他のメソッドの文も含まれているので関係ないものが混ざってます)
public void InsertInformation(String name, String birthday, String sex,) {
       //SQL文
       //メッセージ情報を挿入
       String sql =
               "INSERT INTO table_a left outer join table_a on table_b.b_id = table_a.a_id left outer join table_c on table_b.id_b_c = table_c.id_c VALUES(?, ?, sysdate(), 0, sysdate(), sysdate(), ?, ?)";
               
       try {
           Class.forName("com.mysql.jdbc.Driver");            //ドライバクラスのロード
           conn = DriverManager.getConnection(url, user, password);   //Connectionクラス生成
           pstmt = conn.prepareStatement(sql);       //PreparedStatementクラス生成
           pstmt.setString(1, name);
           pstmt.setString(2, birthday);
           pstmt.setString(3, sex);
           pstmt.executeUpdate();                   //INSERT文を実行
       } catch(SQLException e){
       } catch (ClassNotFoundException e) {
       } finally {
           //終了処理
           //PreparedStatement終了
           if(pstmt != null) {
               try {
                   pstmt.close();
               } catch (SQLException e) {
               }
               pstmt = null;
           }
           //Connection終了
           if(conn != null) {
               try {
                   conn.close();
               } catch (SQLException e) {
               }
               conn = null;
           }
       }
   }
とinsert文を実地、という風な感じです。
実際は他にも入れたいカラムがありますが割愛しています。
上記の状態では結局レコードの追加が出来ていないのですがどこに問題があるのでしょうか?
添削してもらえれば幸いです。
(Insert文が短縮のため書き換えていたり、他にも部分的に変えてあるのでちょっとおかしくなっているかもしれません。そもそもあっている自信もないのですが、おかしな部分があればご指摘願います。)
どうぞ宜しくお願い致します。
追記です。
環境についてですが、使用しているのはEclipseというソフトで、PcがMacのためオラクルではなくMysqlを使用しています。(他に情報というとどのような点について記載すればよいのでしょうか、申し訳ありません)
どこがうまくいってないのかという原因を明確にできていないのですが、デバッグをしてみるとdaoまで動作はしているとは思います。結局jspの入力フォームから情報を渡せていないのか、servletかdaoのsql文に問題があるのかがまだよくわからない状況です。
情報が少なくて申し訳ありませんが、よろしくお願いします。
情報が少なくて申し訳ありませんが、よろしくお願いします。
追記(誤ってコメントランに載せてしまっていたので再記します)
デバッグをして確認してみたところ変数にはちゃんと目的の値が格納されていました。なのでやはりsql文に問題があったようです。
insert文を複数のテーブルに対してやる場合はSELECT文と同じではダメなんですね・・・
自分で調べて見つけたのが
INSERT ALL
INTO テーブル名(カラム名1, カラム名2) 
VALUES (カラム1, カラム2)
INTO テーブル名2(カラム名1, カラム名2) 
VALUES (カラム1, カラム2)
SELECT * FROM DUAL;
というものだったんですがこれでも複数のテーブルに登録はできませんでした(テーブルを分けてのinsertは成功しています)。
こういう場合はsql文を二つ用意しないとダメなんでしょうか?
その時daoでのsql文を格納している変数"sql"は同じように変数をもう一つ用意するべきなんでしょうか?
大変お手数ですがよろしくお願いいたします。
  • Java

    18636 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    8512 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    1244 questions

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

  • servlet

    629 questions

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

1 追記です。

manmos

manmos score 53

2016/02/21 19:39  投稿

jsp→servlet→daoの流れでMysqlへレコードの追加
現在servlet&jspの学習の一環で、jspにて入力した情報をもとにMysqlのDBへレコードを追加する方法を調べているのですが、どうにもうまくいきません。
まずjspが
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content=
"width=device-width, initial-scale=1">
<script type="text/javascript">
</script>
<title>登録</title>
</head>
<body>
<h1>登録</h1>
<form action="./Syousai" method="post">
氏名<input type="text" name="Name" size="20" maxlength="20"><br>   
生年月日<input type="text" name="BirthDay" size="10" maxlength="10"><br>
性別<input type="radio" name="性別" value="0" /> 男
<input type="radio" name="性別" value="1" /> 女<br>
(略)
 <input type="submit" value="登録" />
</form>
</body>
</html>
と、名前やその他の情報を入力できるようにしています。
次にservletが、
package servlet;
import java.io.IOException;
import java.util.ArrayList;
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 Dao.listDao;
import dto.Listinfo;
/**
* Servlet implementation class Insert
*/
@WebServlet("/Insert")
public class Insert extends HttpServlet {
   private static final long serialVersionUID = 1L;
   
   protected void doGet(HttpServletRequest request,
           HttpServletResponse response) throws ServletException, IOException {
       
       listDao daoArray = new listDao();
       ArrayList<Listinfo> listInfo = daoArray.findAll(null);
       request.setAttribute("list", listInfo);
       request.getRequestDispatcher("/WEB-INF/jsp/Insert.jsp").forward(request,
               response);
   }
   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //   HttpSession session = request.getSession();
   
       request.setCharacterEncoding("UTF-8");   //UTF-8にエンコーディング
       
       String name = request.getParameter("Name");
       String birthday = request.getParameter("BirthDay");
       String sex = request.getParameter("性別");
       
       
       listDao dao = new listDao();       //Daoクラス生成
       dao.InsertInformation(employeeId, name, name_hiragana, birthday, sex, mail_address, teliphone_number, company_id, business_maneger, department, commissioning_status, enter_date, retire_date, status);   //挿入処理}
       
response.sendRedirect("./List");//レコード追加後、入力画面の前の一覧へもどる
}
}
と、jspから情報を取得し、daoへ渡します。
最後にDao内のメソッドで
package Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import dto.Listinfo; //(他のメソッドの文も含まれているので関係ないものが混ざってます)
public void InsertInformation(String name, String birthday, String sex,) {
       //SQL文
       //メッセージ情報を挿入
       String sql =
               "INSERT INTO table_a left outer join table_a on table_b.b_id = table_a.a_id left outer join table_c on table_b.id_b_c = table_c.id_c VALUES(?, ?, sysdate(), 0, sysdate(), sysdate(), ?, ?)";
               
       try {
           Class.forName("com.mysql.jdbc.Driver");            //ドライバクラスのロード
           conn = DriverManager.getConnection(url, user, password);   //Connectionクラス生成
           pstmt = conn.prepareStatement(sql);       //PreparedStatementクラス生成
           pstmt.setString(1, name);
           pstmt.setString(2, birthday);
           pstmt.setString(3, sex);
           pstmt.executeUpdate();                   //INSERT文を実行
       } catch(SQLException e){
       } catch (ClassNotFoundException e) {
       } finally {
           //終了処理
           //PreparedStatement終了
           if(pstmt != null) {
               try {
                   pstmt.close();
               } catch (SQLException e) {
               }
               pstmt = null;
           }
           //Connection終了
           if(conn != null) {
               try {
                   conn.close();
               } catch (SQLException e) {
               }
               conn = null;
           }
       }
   }
とinsert文を実地、という風な感じです。
実際は他にも入れたいカラムがありますが割愛しています。
上記の状態では結局レコードの追加が出来ていないのですがどこに問題があるのでしょうか?
添削してもらえれば幸いです。
(Insert文が短縮のため書き換えていたり、他にも部分的に変えてあるのでちょっとおかしくなっているかもしれません。そもそもあっている自信もないのですが、おかしな部分があればご指摘願います。)
どうぞ宜しくお願い致します。
どうぞ宜しくお願い致します。
追記です。
環境についてですが、使用しているのはEclipseというソフトで、PcがMacのためオラクルではなくMysqlを使用しています。(他に情報というとどのような点について記載すればよいのでしょうか、申し訳ありません)
どこがうまくいってないのかという原因を明確にできていないのですが、デバッグをしてみるとdaoまで動作はしているとは思います。結局jspの入力フォームから情報を渡せていないのか、servletかdaoのsql文に問題があるのかがまだよくわからない状況です。
情報が少なくて申し訳ありませんが、よろしくお願いします。
  • Java

    18636 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    8512 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    1244 questions

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

  • servlet

    629 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る