🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JTable

JTableとは二次元的なセルの表を表示し編集するJava Swing用のコンポーネントです。

Java

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

Q&A

解決済

2回答

5224閲覧

JTableでDBにデータを登録したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

JTable

JTableとは二次元的なセルの表を表示し編集するJava Swing用のコンポーネントです。

Java

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

0グッド

0クリップ

投稿2016/09/17 18:16

編集2016/09/18 20:36

###前提・実現したいこと
JTableでDBにデータを登録したいです。

###該当のソースコード

Java

1package Main; 2 3import java.awt.BorderLayout; 4 5import java.awt.Font; 6import java.awt.Insets; 7import java.sql.Connection; 8import java.sql.SQLException; 9import java.sql.Statement; 10import javax.swing.DefaultCellEditor; 11import javax.swing.JPanel; 12import javax.swing.JTable; 13import javax.swing.JTextField; 14import javax.swing.JToolBar; 15import javax.swing.table.AbstractTableModel; 16import javax.swing.table.JTableHeader; 17import javax.swing.table.TableModel; 18import DBManager.DBManager; 19public class regist extends Top{ 20 String[][] data; 21 int nCol, nRow; 22 BorderLayout frame = new BorderLayout(); 23 private String employee_name=null; 24 private String postal_code=null; 25 private String address=null; 26 private String phone_number=null; 27 private String mobile_number=null; 28 private int employee_id =0; 29 private String header[] = new String[nCol]; 30 public regist(final String sqldb, final String sqltable) throws Exception,SQLException { 31 JToolBar toolBar = new JToolBar(); 32 JPanel p = new JPanel(); 33 p.setLayout(new BorderLayout()); 34 toolBar.setFloatable(true); 35 toolBar.setMargin(new Insets(0,0,0,0)); 36 p.setLayout(new BorderLayout()); 37 p.getLayout(); 38 TableModel dataModel = new AbstractTableModel() { 39 private static final long serialVersionUID = 1L; 40 public int getColumnCount() { return header.length; } 41 public int getRowCount() { return data.length; } 42 public boolean isCellEditable(int row, int col) { return true; } 43 public Object getValueAt(int row, int col) { return data[row][col]; } 44 public void setValueAt(Object val, int row, int col) { 45 data[row][col] = (String)val; 46 try { updateData(sqldb, sqltable, row, col); } 47 catch (Exception e) { System.out.println(e.getMessage()); } 48 } 49 public String getColumnName(int col) { return header[col]; } 50 }; 51 JTable table = new JTable(dataModel); 52 JTableHeader jh = table.getTableHeader(); 53 jh.setFont(new Font(jh.getFont().getFamily(),Font.PLAIN,18)); 54 table.setFont(new Font(jh.getFont().getFamily(),Font.PLAIN,18)); 55 table.setRowHeight(22); 56 JTextField Text = new JTextField(); 57 Text.setFont(new Font(jh.getFont().getFamily(), Font.PLAIN, 18)); 58 table.setDefaultEditor(Object.class, new DefaultCellEditor(Text)); 59 } 60 public regist() { 61 } 62 void loadData(String database, String table) throws Exception,SQLException { 63 header[0]="ID"; 64 header[1]="名前"; 65 header[2]="郵便番号"; 66 header[3]="住所"; 67 header[4]="電話番号"; 68 header[5]="携帯番号"; 69 } 70 void updateData(String database, String table, int row, int col) throws Exception,SQLException { 71 header[0]="employee_id"; 72 header[1]="employee_name"; 73 header[2]="postal_code"; 74 header[3]="address"; 75 header[4]="phone_number"; 76 header[5]="mobile_number"; 77 Connection con =DBManager.getConnection(); 78 String sql = "INSERT INTO " + table + " VALUES (?,?,?,?,?,?)"; 79 PreparedStatement ps = con.prepareStatement(sql); 80 ps.execute(sql); 81 82 } 83 84 85 86 87 88 void printFunction()throws Exception,SQLException { 89 String db = "D:/PostgreSQL/9.5/bin"; 90 String table = "employee"; 91 new JTableFrame(db, table).setVisible(true); 92 93 } 94} 95 96

java

1package DBManager; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5 6 7public class DBManager { 8 public static Connection getConnection(){ 9 try{ 10 Class.forName("org.postgresql.Driver"); 11 Connection con = 12 DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", // データベース名 13 "postgres", // 接続ユーザ名 14 "abcd"); 15 return con; 16 }catch(Exception e){ 17 throw new IllegalStateException(e); 18 } 19 } 20}

###補足情報(言語/FW/ツール等のバージョンなど)
jdk 1.7.0_80
postgreSQL9.5
eclipse4.5
データの表示、更新はできるのですが、新規登録ができません。
どなたかご教示願います。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/18 00:09

SQLインジェクションし放題
退会済みユーザー

退会済みユーザー

2016/09/18 01:08

どうしたらいいのでしょうか。クローズですか?
退会済みユーザー

退会済みユーザー

2016/09/18 05:56

SQLインジェクション対策は「PreparedStatement」をつかうといいです。サンプル→http://www.javadrive.jp/servlet/database/index10.html
退会済みユーザー

退会済みユーザー

2016/09/18 20:39

ありがとうございます。行を追加して登録する方法がわかりましたら教えていただけると、さらに助かります。よろしくお願い致します。
ijufumi

2016/09/21 09:35

「新規登録ができない」というのは、「プログラムは正常終了するけど、DBに登録できていない」「プログラムが異常終了する(エラーが発生する)」のどちらでしょうか? また、「更新はできる」とはDBの更新でしょうか?
退会済みユーザー

退会済みユーザー

2016/09/21 12:52

新規登録につきましては、空白の行を追加して新規登録をするためのプログラムの記述方法がわかりません。更新につきましては、JTableのセルを更新すると、DBも更新されます。
guest

回答2

0

ベストアンサー

返事への回答だときれいにコードを表示できなかったので、新規の回答として投稿します。

テーブルに行を追加するだけの簡単なサンプルです。
レコードの追加部分を参考にしてもらえたら嬉しいです。

Java

1import javax.swing.*; 2import javax.swing.event.TableModelEvent; 3import javax.swing.table.DefaultTableModel; 4import java.awt.*; 5 6public class TableWindow extends JFrame { 7 8 private static final String[] COLUMN_NAMES = {"ID", "NAME", "SEX"}; 9 private static final String[][] INITIAL_DATA = {{"1", "John", "Male"}, {"2", "Lisa", "Female"}}; 10 11 public TableWindow() { 12 setTitle("Test"); 13 setSize(new Dimension(400, 200)); 14 15 JPanel mainPanel = new JPanel(new FlowLayout()); 16 DefaultTableModel tableModel = new DefaultTableModel(INITIAL_DATA, COLUMN_NAMES); 17 tableModel.addTableModelListener(e -> { 18 if (e.getType() == TableModelEvent.INSERT) { 19 insertRecord(); 20 } 21 else if (e.getType() == TableModelEvent.UPDATE) { 22 updateRecord(); 23 } 24 }); 25 26 JTable table = new JTable(tableModel); 27 mainPanel.add(table); 28 29 JButton insertButton = new JButton("Add"); 30 insertButton.addActionListener(e -> { 31 // ここで画面などを使い、登録するデータを入力させる 32 33 // 入力した値を元に行を追加する 34 tableModel.addRow(new Object[]{}); 35 }); 36 mainPanel.add(insertButton); 37 38 getContentPane().add(mainPanel); 39 40 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 41 } 42 43 private void insertRecord() { 44 System.out.println("insert"); 45 } 46 47 private void updateRecord() { 48 System.out.println("update"); 49 } 50} 51

投稿2016/09/23 03:30

ijufumi

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

行を追加する場合、ボタンなどを押して行うと思いますので、
そのイベントの時にINSERTを実行したらどうでしょうか?

Java

1JButton registButton = new JButton("追加"); 2registButton.addActionListener(new ActionListener(){ 3 public void actionPerformed(ActionEvent e) { 4 // ここでJTableにデータ追加及びINSERT処理を記述 5 } 6});

あと、TableModelはDefaultTableModelを使った方が、
データの追加はしやすそうです。

投稿2016/09/22 08:16

ijufumi

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/22 12:09

ありがとうございます。 すみませんが、短くてもかまいませんので、サンプルプログラムを教えていただけませんでしょうか。うまくプログラムに反映させることができませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問