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

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

ただいまの
回答率

88.05%

データベースの登録更新削除をJTextの入力フォームから行いたい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,261

該当のソースコード

package employee_management_system;

import java.awt.Cursor;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import java.awt.Font;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ListSelectionModel;

public class employee_list extends JFrame {
    private static final long serialVersionUID = 1L;        // ソースコード保護
    private final Action Sign_action = new Sign_up();
    private final Action Edit_action = new Edit();
    private final Action Deleate_action = new Deleate();
    private JPanel contentPane;
    private JTable table;
    private JButton Sign_button;
    private JButton Edit_button;
    private JButton Deleate_button;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    employee_list frame = new employee_list();
                    frame.setTitle("社員一覧");        // タイトル
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public employee_list() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        // ×ボタンを押すとシステム終了
        setBounds(100, 100, 600, 450);        // ウィンドウ

        contentPane = new JPanel();        // JPanel配置
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JScrollPane scrollPane = new JScrollPane();        // テーブル情報がウィンドウサイズを超えるとき、スクロールして表示する。
        scrollPane.setBounds(10, 40, 560, 360);
        contentPane.add(scrollPane);

        table = new JTable();    // テーブルのカラム表示
        table.setFont(new Font("MS Pゴシック", Font.PLAIN, 12));
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setModel(new DefaultTableModel(
            new Object[][] {
            },
            new String[] {
            "社員No", "名前", "生年月日", "年齢","性別", "メールアドレス"
            }
        ));

        this.setCursor(new Cursor(Cursor.WAIT_CURSOR));        // データベース接続
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/employee_list","root","password");
            Statement stm = conn.createStatement();
            String sql = "select * from employee_list";
            ResultSet rs = stm.executeQuery(sql);

            DefaultTableModel display = (DefaultTableModel)table.getModel();        // テーブル情報表示
            display.setRowCount(0);
            while(rs.next()){display.addRow(new String[]{rs.getString(1), rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6)});
            }

            rs.close();        // データベース切断
            stm.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        table.getColumnModel().getColumn(5).setPreferredWidth(250);
        scrollPane.setViewportView(table);
        table.setDefaultEditor(Object.class, null);

        Sign_button = new JButton("新規登録");        // 新規登録ボタン
        Sign_button.setBounds(20, 5, 120, 30);
        Sign_button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {    
            }
        });
        Sign_button.setAction(Sign_action);
        Sign_button.setFont(new Font("MS Pゴシック", Font.PLAIN, 14));
        contentPane.add(Sign_button);

        Edit_button = new JButton("編集");        // 編集ボタン
        Edit_button.setFont(new Font("MS Pゴシック", Font.PLAIN, 14));
        Edit_button.setBounds(180, 5, 70, 30);
        Edit_button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {}
        });
        Edit_button.setAction(Edit_action);
        contentPane.add(Edit_button);

        Deleate_button = new JButton("削除");        // 削除ボタン
        Deleate_button.setFont(new Font("MS Pゴシック", Font.PLAIN, 14));
        Deleate_button.setBounds(290, 5, 70, 30);
        Deleate_button.setAction(Deleate_action);
        Deleate_button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        contentPane.add(Deleate_button);
    }

    private class Sign_up extends AbstractAction {        // 新規登録ボタンを押した際の挙動
        private static final long serialVersionUID = 1L;
        public Sign_up() {
            putValue(NAME, "新規登録");
            putValue(SHORT_DESCRIPTION, "新しく社員の情報を登録");        // カーソルを合わせた際に説明文を表示
        }
        public void actionPerformed(ActionEvent e) {
            employee_sign_up sign = new employee_sign_up();
            sign.sign_up();
        }
    }

    private class Edit extends AbstractAction {        // 編集ボタンを押した際の挙動
        private static final long serialVersionUID = 1L;
        public Edit() {
            putValue(NAME, "編集");
            putValue(SHORT_DESCRIPTION, "選択している社員の情報を編集");        // カーソルを合わせた際に説明文を表示
        }
        public void actionPerformed(ActionEvent e) {
            employee_edit ed = new employee_edit();
            ed.edit();
        }
    }

    private class Deleate extends AbstractAction {        // 削除ボタンを押した際の挙動
        private static final long serialVersionUID = 1L;
        public Deleate() {
            putValue(NAME, "削除");
            putValue(SHORT_DESCRIPTION, "選択している社員の情報を削除");        // カーソルを合わせた際に説明文を表示
        }
        public void actionPerformed(ActionEvent e) {
            employee_deleate del = new employee_deleate();
            del.deleate();
        }
    }
}

試したこと

ネットで調べる。調査力がないのかもう2週間ほど調べる日が続いています。。。

補足情報(言語/FW/ツール等のバージョンなど)

JAVA、Eclipse、JavaSwing

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • masaya_ohashi

    2016/06/07 15:00

    ソースコードは```で囲むと表示がキレイになります。

    現状以下の2つをどこまで理解していますか?
    ・Swingのボタンの挙動をどう書けばいいか
    ・JDBCのConnection、Statement、ResultSetの使い方

    また、現在書かれているコードについては全て自力で書いたものですか?最初からあるものですか?

    キャンセル

  • masaya_ohashi

    2016/06/07 15:04

    もう一点、現状このコードに構文エラーがないとすると、以下のクラスも存在するはずです。これらはどんなコードで、あなたが書いたものですか?
    ・employee_sign_up
    ・employee_edit
    ・employee_deleate

    キャンセル

  • sakurasunrise

    2016/06/07 15:06

    ボタン挙動についてはほぼわかっていないです。ネットで答えを見つけてそれをコピペしているだけかクラスの呼び出しをしているだけなので・・・。

    JDBCについても上と同じでほぼコピペです。どの文がどの役割をしているかなどは理解しているつもりですが書けと言われたら書けないです。

    現在書いているコードはSwing上でレイアウトを作り、それをベースに書いたものです。

    キャンセル

  • sakurasunrise

    2016/06/07 15:08

    そちらはボタンを押した際のウィンドウを表示するクラスです。Swingでレイアウトを作りそれを元に作成しました。

    そちらは機能などは全く備わっていない状態です。

    キャンセル

回答 1

+1

あまり全て答えすぎると研修の意味がないのでヒントとして幾つか情報を提供いたします。

//これはJDBCでMySQLを使うために、1回だけ呼び出す必要がある呪文のようなものです。
Class.forName("com.mysql.jdbc.Driver");
// これがJDBCを使って実際にMySQLに接続している部分です
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/employee_list","root","password");
//接続したMySQLに対してSELECT文を実行している部分です
Statement stm = conn.createStatement(); 
String sql = "select * from employee_list"; 
ResultSet rs = stm.executeQuery(sql);

JDBCはStatementと呼ばれるものを使ってSQL文を実行します。
Statement#executeQueryはSELECT文などの結果を取得する際に使い、
UPDATE文、INSERT文の際はStatement#executeUpdateの方を使います。
この辺で調べてみましょう。
http://www.javadrive.jp/servlet/database/

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/08 09:48

    上のコメントで「Javaのコードで情報を直接書いてMySQLのテーブルに登録、編集はできる」と答えられていますが、どういう状況でしょう?また、2つ上のコードでは各フィールドからSystem.out.printでちゃんと中身を取得して表示することまでできています。この2つのことができるのであればデータベースに登録することはそれらを組み合わせるだけだと思いますが、ここまで理解しておられるうえで何がわからないのでしょう?SQL実行時にエラーが起きてしまう、とかですか?

    キャンセル

  • 2016/06/08 09:53 編集

    その2つを組み合わせるというコードがわからないです。
    いろいろ記述はしてみてはいるのですが構文エラーになってしまいます。

    キャンセル

  • 2016/06/08 09:58

    では構文エラーになるそのコードを提示するのが回答をもらう一番の近道です。その部分が書かれていないため、なにで躓いているのか、質問文のコードからは想像がつきませんでした。いま質問文に書かれているソースコードのうち、import文等の直接必要そうでない部分を省略し、INSERTをしてもダメだったコードを追記してみてください。

    キャンセル

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

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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