JAVA 자바 - JDBC (Oracle) - DB에서 스윙JTable로 가져와서 바로 저장하기, 수정하기, 삭제하기
관련링크
본문
각 프로젝트마다 DB연결 jar 파일을 지정 해줘야 한다.
import java.awt.Rectangle; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.swing.*; import javax.swing.JFrame; import javax.swing.table.DefaultTableModel; public class JdbcJtableTest01 extends JPanel{ // DB에서 스윙 화면으로 테이블 값 가져오기(select) , 저장하기(insert), 수정하기(update), 삭제하기(delete) private static final long serialVersionUID = 1L; private JButton jBtnAddRow = null; // 테이블 한줄 추가 버튼 private JButton jBtnSaveRow = null; // 테이블 한줄 저장 버튼 private JButton jBtnEditRow = null; // 테이블 한줄 저장 버튼 private JButton jBtnDelRow = null; // 테이블 한줄 삭제 벅튼 private JTable table; private JScrollPane scrollPane; // 테이블 스크롤바 자동으로 생성되게 하기 private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:thin:@111.222.111.222:1111:XE"; // @호스트 IP : 포트 : SID private String colNames[] = {"아이디","이름","성별","섯다점수","최근접속날짜"}; // 테이블 컬럼 값들 private DefaultTableModel model = new DefaultTableModel(colNames, 0); // 테이블 데이터 모델 객체 생성 private Connection con = null; private PreparedStatement pstmt = null; private ResultSet rs = null; // 리턴받아 사용할 객체 생성 ( select에서 보여줄 때 필요 ) public JdbcJtableTest01() { setLayout(null); // 레이아웃 배치관리자 삭제 table = new JTable(model); // 테이블에 모델객체 삽입 table.addMouseListener(new JTableMouseListener()); // 테이블에 마우스리스너 연결 scrollPane = new JScrollPane(table); // 테이블에 스크롤 생기게 하기 scrollPane.setSize(500, 200); add(scrollPane); initialize(); select(); } private class JTableMouseListener implements MouseListener{ // 마우스로 눌려진값확인하기 public void mouseClicked(java.awt.event.MouseEvent e) { // 선택된 위치의 값을 출력 JTable jtable = (JTable)e.getSource(); int row = jtable.getSelectedRow(); // 선택된 테이블의 행값 int col = jtable.getSelectedColumn(); // 선택된 테이블의 열값 System.out.println(model.getValueAt(row, col)); // 선택된 위치의 값을 얻어내서 출력 } public void mouseEntered(java.awt.event.MouseEvent e) { } public void mouseExited(java.awt.event.MouseEvent e) { } public void mousePressed(java.awt.event.MouseEvent e) { } public void mouseReleased(java.awt.event.MouseEvent e) { } } private void select(){ // 테이블에 보이기 위해 검색 String query = "select id, name, gender, sutdascore, latest from user_info"; try{ Class.forName(driver); con = DriverManager.getConnection(url, "aaaa", "aaaa"); pstmt = con.prepareStatement(query); rs = pstmt.executeQuery(); // 리턴받아와서 데이터를 사용할 객체생성 while(rs.next()){ // 각각 값을 가져와서 테이블값들을 추가 model.addRow(new Object[]{rs.getString("id"),rs.getString("name"), rs.getString("gender"),rs.getString("sutdascore"), rs.getString("latest")}); } }catch(Exception e){ System.out.println(e.getMessage()); }finally{ try { rs.close(); pstmt.close(); con.close(); // 객체 생성한 반대 순으로 사용한 객체는 닫아준다. } catch (Exception e2) {} } } private void initialize() { // 액션이벤트와 버튼 컴포넌트 설정 // 테이블 새로 한줄 추가하는 부분 jBtnAddRow = new JButton(); jBtnAddRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); // 선택된 버튼의 텍스트값 출력 DefaultTableModel model2 = (DefaultTableModel)table.getModel(); model2.addRow(new String[]{"","","","",""}); // 새테이블의 초기값 } }); jBtnAddRow.setBounds(30,222,120, 25); jBtnAddRow.setText("추가"); add(jBtnAddRow); // 테이블 새로 저장하는 부분 jBtnSaveRow = new JButton(); jBtnSaveRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); // 선택된 버튼의 텍스트값 출력 DefaultTableModel model2 = (DefaultTableModel)table.getModel(); int row = table.getSelectedRow(); if(row<0) return; // 선택이 안된 상태면 -1리턴 String query = "insert into user_info(id, name, gender, sutdascore, LATEST)" + "values (?,?,?,?,SYSDATE)"; try{ Class.forName(driver); // 드라이버 로딩 con = DriverManager.getConnection(url, "aaaa", "aaaa"); // DB 연결 pstmt = con.prepareStatement(query); // 물음표가 4개 이므로 4개 각각 입력해줘야한다. pstmt.setString(1, (String) model2.getValueAt(row, 0)); pstmt.setString(2, (String) model2.getValueAt(row, 1)); pstmt.setString(3, (String) model2.getValueAt(row, 2)); pstmt.setString(4, (String) model2.getValueAt(row, 3)); int cnt = pstmt.executeUpdate(); //pstmt.executeUpdate(); create insert update delete //pstmt.executeQuery(); select }catch(Exception eeee){ System.out.println(eeee.getMessage()); }finally{ try { pstmt.close(); con.close(); } catch (Exception e2) {} } model2.setRowCount(0); // 전체 테이블 화면을 지워줌 select(); // 저장 후 다시 전체 값들을 받아옴. } }); jBtnSaveRow.setBounds(182,222,120, 25); jBtnSaveRow.setText("저장"); add(jBtnSaveRow); // 선택된 테이블 한줄 수정하는 부분 jBtnEditRow = new JButton(); jBtnEditRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); // 선택된 버튼의 텍스트값 출력 DefaultTableModel model2 = (DefaultTableModel)table.getModel(); int row = table.getSelectedRow(); if(row<0) return; // 선택이 안된 상태면 -1리턴 String query = "UPDATE user_info SET name=?, gender=?, sutdascore=? " +"where id=?"; try{ Class.forName(driver); // 드라이버 로딩 con = DriverManager.getConnection(url, "aaaa", "aaaa"); // DB 연결 pstmt = con.prepareStatement(query); // 물음표가 4개 이므로 4개 각각 입력해줘야한다. pstmt.setString(1, (String) model2.getValueAt(row, 1)); pstmt.setString(2, (String) model2.getValueAt(row, 2)); pstmt.setString(3, (String) model2.getValueAt(row, 3)); pstmt.setString(4, (String) model2.getValueAt(row, 0)); int cnt = pstmt.executeUpdate(); //pstmt.executeUpdate(); create insert update delete //pstmt.executeQuery(); select }catch(Exception eeee){ System.out.println(eeee.getMessage()); }finally{ try { pstmt.close(); con.close(); } catch (Exception e2) {} } model2.setRowCount(0); // 전체 테이블 화면을 지워줌 select(); // 수정 후다시 전체 값들을 받아옴. } }); jBtnEditRow.setBounds(182,270,120, 25); jBtnEditRow.setText("수정"); add(jBtnEditRow); // 선택된 테이블 한줄 삭제하는 부분 jBtnDelRow = new JButton(); jBtnDelRow.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println(e.getActionCommand()); // 선택된 버튼의 텍스트값 출력 DefaultTableModel model2 = (DefaultTableModel)table.getModel(); int row = table.getSelectedRow(); if(row<0) return; // 선택이 안된 상태면 -1리턴 String query = "delete from user_info where id= ?"; try{ Class.forName(driver); // 드라이버 로딩 con = DriverManager.getConnection(url, "aaaa", "aaaa"); // DB 연결 pstmt = con.prepareStatement(query); // 물음표가 1개 이므로 4개 각각 입력해줘야한다. pstmt.setString(1, (String) model2.getValueAt(row, 0)); int cnt = pstmt.executeUpdate(); //pstmt.executeUpdate(); create insert update delete //pstmt.executeQuery(); select }catch(Exception eeee){ System.out.println(eeee.getMessage()); }finally{ try { pstmt.close();con.close(); } catch (Exception e2) {} } model2.removeRow(row); // 테이블 상의 한줄 삭제 } }); jBtnDelRow.setBounds(new Rectangle(320, 222, 120, 25)); jBtnDelRow.setText("삭제"); add(jBtnDelRow); } public static void main(String[] args) { JdbcJtableTest01 panel = new JdbcJtableTest01(); JFrame win = new JFrame(); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); win.add(panel); win.setSize(540,400); win.setVisible(true); } }