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

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

ただいまの
回答率

90.48%

  • Java

    14102questions

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

  • MySQL

    6012questions

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

  • JSP

    948questions

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

jspの入力フォームに初期値を設定

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,743

manmos

score 45

質問です。

現在jspの入力フォームに入力した値を使用してMysqlのDBにレコードを追加するコードを作成したのですが、ここにレコードを更新する機能を追加したいと考えております。
現在の動作の流れとしては
まずDao、Dtoで用意した各テーブルのカラムの変数を一覧画面に表示、以下表示の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 name="viewport" content=
"width=device-width, initial-scale=1">
<script type="text/javascript">
</script>
<title>課題</title>
</head>
<body>
<a href="./Login">ログアウト</a>
<h1>一覧</h1>
<a href="./Detail">新規登録</a>
<body>
 <TABLE border="1">
<TR>
<TH>No</TH>
<TH>氏名</TH>
<TH>氏名(ひらがな)</TH>
<TH>年齢</TH>
<TH>詳細</TH>
</TR>
<TR>
<c:forEach var="tmp" items="${list}">
<TD><c:out value="${tmp.Id}" /></TD>
<TD><c:out value="${tmp.name}" /></TD>
<TD><c:out value="${tmp.nameHiragana}" /></TD>
<TD><c:out value="${tmp.age}" /></TD>
<TD><a href="./Datail">詳細</a></TD>
<TR/>
</c:forEach>
</table>
</body>
</html>


次に入力フォームの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="./Detail" method="post">
氏名<input type="text" name="name" size="20" maxlength="20"><br>
氏名(ひらがな)<input type="text" name="nameHiragana" size="20" maxlength="20"><br>    
生年月日<input type="text" name="birthday" size="10" maxlength="10"><br>
  <input type="submit" value="登録" />
</form>
</body>
</html>


以上で入力した内容をDto内のInsert用のメソッドへ渡し、Insert文を実行、という流れになります。

一覧画面では各レコードを横一列に表示し、レコードごとに入力画面へ移行するボタンを用意していますので、この列の情報をそのまま表示できたらと思います。

ここからどのように書き加えたらよいか、詳しい方いらっしゃればご教授いただければと思います。

どうぞ宜しくお願い致します。

追記です。

実装に何を使っているというのがよくわからないのですが、各コードを記載すればよろしいでしょうか。

Dao:Serect用メソッド

public class listDao {

    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String user = "root";
    private static final String password = "";

    private static Connection conn = null; // Connectionクラス
    private static PreparedStatement pstmt = null; // Statementクラス
    private static ResultSet rs = null; // ResultSetクラス

    public ArrayList<Listinfo> findAll(String[] args) {
        ArrayList<Listinfo> listInfos = new ArrayList<Listinfo>(); 

        String sql = "SELECT * FROM e_einfo";    

        try {
            Class.forName("com.mysql.jdbc.Driver"); // ドライバクラスのロード

            // Connection,Statement,ResultSetのクラスを作成

            conn = DriverManager.getConnection(url, user, password); // Connectionクラス生成
            pstmt = conn.prepareStatement(sql); // Statementクラス生成
            rs = pstmt.executeQuery(); // ResultSetクラス生成

            while (rs.next()) {
                // 結果表からデータを取得
                Listinfo list = new Listinfo();

                // list.setAge(rs.getInt("age"));

                list.setEmployeeId(rs.getString("employee_id"));
                list.setName(rs.getString("name"));
                list.setNameHiragana(rs.getString("name_hiragana"));

                String birthday = rs.getString("birthday");
                int age = convertAge(birthday);
                list.setAge(age);

                listInfos.add(list);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                }
                rs = null;
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                }
                conn = null;
            }

        }
        return listInfos;
    }


Dao:Insertメソッド

public void InsertInformation(String employeeId, String name,
            String name_hiragana, String birthday) throws ClassNotFoundException, SQLException {
        // SQL文
        String sql = "INSERT INTO employee_info (name, name_hiragana, birthday) values(?, ?, cast(? as date))";

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, name_hiragana);
            pstmt.setString(3, birthday);

          pstmt.executeUpdate(); // INSERT文を実行
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } 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;
            }
        }
    }

最後に入力画面のServetです。

/**
     * @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");    
        String Id = request.getParameter("Id");
        String name = request.getParameter("name");
        String name_hiragana = request.getParameter("nameHiragana");
        String birthday = request.getParameter("birthday");


        listDao dao = new listDao();        //Daoクラス生成
        try {
            dao.InsertInformation(employeeId, name, name_hiragana, birthday);
        } catch (ClassNotFoundException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }    //挿入処理}
   //     session.setAttribute("Infomation", dao);

        response.sendRedirect("./List");
}
}

以上になります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • A-pZ

    2016/04/04 00:23

    Servletないしはそれに相当するクラスと、DAO側の実装に何を使われているか、 またはどこまで実装できているかを書くと、回答が得られやすいと思います。

    キャンセル

回答 2

+1

listDaoクラスのfindAllでレコードを取得できているので、この内容をJSTLリファレンス:<c:forEach>とかJSTLリファレンス:<c:set>とかを参考に出力すればいいのでは?

また、

MySQL で INSERT と UPDATE を1文で実現する ~ ON DUPLICATE KEY UPDATE 編~ | UB Lab.

「レコード更新」なのだから、Updateしてやればいいんじゃないすかね?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

なるほどそこまで実装できているのでしたら、新規登録用の画面を流用して、さらにUpdateDAOを実装すればよいでしょうか。
UpdateDAOではInsertの時と同様、リクエストパラメータを受け取った内容をもとに、今度はUPDATEのSQLを実行すると良いでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/04 15:15

    私の回答だとMySql独自の機能を使う前提ですが、こちらの回答だと汎用的なSQLを想定してますね。
    Updateの場合とInsertの場合のどちらになるのかをロジックで切り分けるのが必要になります。
    今後仕事で開発することを考えてるなら、こちらの書き方の方がよいかも。

    キャンセル

関連した質問

  • 解決済

    【JSP】複数のsubmitボタンでサーブレット側で処理を分岐させたい

    閲覧有難うございます。 初歩的な質問失礼します。 JSP側にsubmitボタンを複数設置しボタンを押したらサーブレット側のif文で分岐をしているのですがnull値が出力され

  • 解決済

    jsp→servlet→daoの流れでMysqlへレコードの追加

    現在servlet&jspの学習の一環で、jspにて入力した情報をもとにMysqlのDBへレコードを追加する方法を調べているのですが、どうにもうまくいきません。 まずjspが

  • 受付中

    javaからMysqlへinsertでレコード追加

    現在javaの勉強として人員管理のwebアプリを作っています。 Mysqlのレコードを→Dao→jspで一覧表示、逆にjspのフォームへ情報を入力し、レコード登録や削除を行うとい

  • 受付中

    javaからMysqlへのInsert文実行について

    只今javaの学習の一環でwebアプリケーションの作成を行ってます。 現在javaの勉強として人員管理のwebアプリを作っています。  Mysqlのレコードを→Dao→jspで

  • 受付中

    jspのプルダウンメニューの初期値に変数を使用するには

    現在データベースのレコードを更新するコードを作成中なんですが、更新用の入力フォームに初期値を設定するところで躓いてしまっています。  テキストボックスの初期値にDaoとサーブレッ

  • 受付中

    javaからMysqlに更新の処理を行いたい

    javaからMysqlを操作するやり方について質問です。 現在jspの入力フォームに入力した情報を使ってMysqlへ登録、更新の処理を行うコードを作成中なのですが、登録の処理

  • 受付中

    forEach文でcheckboxをだすときに

    jspで、forEach文でcheckboxを出すとnameが同じになるので配列でパラメーターを受け取ります。 そのときチェックされたものが配列の[0]から入ってしまいますが、も

  • 受付中

    Invalid location of text

    前提・実現したいこと 閲覧誠に有難う御座います。 只今eqlipceを使いJSP、servletで開発しているのですが、 コンパイル、実行など出来ているエラーではないのと思う

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

  • Java

    14102questions

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

  • MySQL

    6012questions

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

  • JSP

    948questions

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