###前提・実現したいこと
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
データの表示、更新はできるのですが、新規登録ができません。
どなたかご教示願います。
SQLインジェクションし放題
どうしたらいいのでしょうか。クローズですか?
SQLインジェクション対策は「PreparedStatement」をつかうといいです。サンプル→http://www.javadrive.jp/servlet/database/index10.html
ありがとうございます。行を追加して登録する方法がわかりましたら教えていただけると、さらに助かります。よろしくお願い致します。
「新規登録ができない」というのは、「プログラムは正常終了するけど、DBに登録できていない」「プログラムが異常終了する(エラーが発生する)」のどちらでしょうか?
また、「更新はできる」とはDBの更新でしょうか?
新規登録につきましては、空白の行を追加して新規登録をするためのプログラムの記述方法がわかりません。更新につきましては、JTableのセルを更新すると、DBも更新されます。
回答2件
あなたの回答
tips
プレビュー