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

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

新規登録して質問してみよう
ただいま回答率
86.02%
JTable

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

Java

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

Q&A

解決済

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

退会済みユーザー

退会済みユーザー

総合スコア0

JTable

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

Java

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

2回答

0グッド

0クリップ

4253閲覧

投稿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
データの表示、更新はできるのですが、新規登録ができません。
どなたかご教示願います。

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

退会済みユーザー

退会済みユーザー

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も更新されます。

回答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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

JTable

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

Java

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