データベースの登録更新削除をJTextの入力フォームから行いたい
- 評価
- クリップ 0
- VIEW 3,127
該当のソースコード
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+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/
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.31%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
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でレイアウトを作りそれを元に作成しました。
そちらは機能などは全く備わっていない状態です。