반응형
JFrame을 이용하여 폼을 만든 후 Mysql DB에 접속하여 select, insert, delete 을 해보자!!
CustomerDBUse.java
package CustomerDB; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.util.*; import javax.print.attribute.standard.*; import javax.swing.*; import javax.swing.table.*; public class CustomerDBUse extends JFrame implements ActionListener { JPanel panWest; JPanel panSouth; // 레이블과 텍스트 필드를 묶어서 panWest에 배치될 패널 JPanel p1, p2, p3, p4; // 텍스트 필드 JTextField txtName, txtEmail, txtTel; // 아래쪽의 버튼 JButton btnTotal, btnAdd, btnDel, btnSearch, btnCancel; // 데이터를 출력할 테이블 JTable table; // 누른 버튼의 이름을 기억하기 위한 상수 선언 및 변수 선언 private static final int NONE = 0; private static final int ADD = 1; private static final int DELETE = 2; private static final int SEARCH = 3; private static final int TOTAL = 4; int cmd = NONE; // 데이터베이스 연결을 저장할 변수 Connection con; // sql 수행을 위한 변수 Statement stmt; PreparedStatement pstmtInsert; PreparedStatement pstmtDelete; // 데이터베이스 연결 클래스 이름과 위치 및 아이디와 패스워드 저장 private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:thin:@211.183.0.100:1521:orcl"; private String user = "user12"; private String pwd = "user12"; // 데이터베이스 접속하는 메서드 private void dbConnect() { try { Class.forName(driver); con = DriverManager.getConnection(url, user, pwd); stmt = con.createStatement(); JOptionPane.showMessageDialog(this, "접속 성공"); } catch (Exception e) { JOptionPane.showMessageDialog(this, e.getMessage()); } } private String sqlInsert = "insert into customer2 values(id_sequence.nextval,?,?,?,sysdate)"; private String sqlDelete = "delete from customer2 where name = ?"; PreparedStatement pstmtTotal; private String sqlTotal = "select * from customer2"; PreparedStatement pstmtSearch; private String sqlSearch = "select * from customer2 where name =?"; // 생성자 - 화면 구성과 이벤트 연결 public CustomerDBUse() { dbConnect(); panWest = new JPanel(new GridLayout(5, 0)); p1 = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p1.add(new JLabel("이 름")); p1.add(txtName = new JTextField(12)); panWest.add(p1); p2 = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p2.add(new JLabel("이 메 일")); p2.add(txtEmail = new JTextField(12)); panWest.add(p2); p3 = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p3.add(new JLabel("전화번호")); p3.add(txtTel = new JTextField(12)); panWest.add(p3); p4 = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p4.add(new JLabel(" ")); panWest.add(p4); add(panWest, "West"); panSouth = new JPanel(); panSouth.add(btnTotal = new JButton("전체보기")); panSouth.add(btnAdd = new JButton("추 가")); panSouth.add(btnDel = new JButton("삭 제")); panSouth.add(btnSearch = new JButton("검 색")); panSouth.add(btnCancel = new JButton("취 소")); add(panSouth, "South"); // 테이블을 생성해서 부착 add(new JScrollPane(table = new JTable()), "Center"); // 텍스트 필드를 사용할 수 없도록 설정 txtEmail.setEditable(false); txtName.setEditable(false); txtTel.setEditable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("데이터베이스 연동"); setBounds(100, 100, 500, 250); setVisible(true); btnAdd.addActionListener(this); btnTotal.addActionListener(this); btnDel.addActionListener(this); btnSearch.addActionListener(this); btnCancel.addActionListener(this); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { try { if (con != null) { con.close(); } } catch (Exception e1) { } } }); } // 사용자가 작업을 위해서 버튼을 처음 눌렀을 때 호출되서 // 버튼의 활성화 여부를 설정하는 사용자 정의 메서드 private void setButton(int command) { // 취소 버튼을 제외한 버튼 비 활성화 btnTotal.setEnabled(false); btnAdd.setEnabled(false); btnCancel.setEnabled(false); btnDel.setEnabled(false); btnSearch.setEnabled(false); switch (command) { case ADD: { btnAdd.setEnabled(true); cmd = ADD; break; } case DELETE: { btnDel.setEnabled(true); cmd = DELETE; break; } case TOTAL: { btnTotal.setEnabled(true); cmd = TOTAL; break; } case SEARCH: { btnSearch.setEnabled(true); cmd = SEARCH; break; } case NONE: { btnTotal.setEnabled(true); btnAdd.setEnabled(true); btnCancel.setEnabled(true); btnDel.setEnabled(true); btnSearch.setEnabled(true); cmd = NONE; break; } default: break; } } private void setText(int command) { switch (command) { case ADD: { txtName.setEditable(true); txtEmail.setEditable(true); txtTel.setEditable(true); break; } case DELETE: { txtName.setEditable(true); txtEmail.setEditable(false); txtTel.setEditable(false); break; } case SEARCH: { txtName.setEditable(true); txtEmail.setEditable(false); txtTel.setEditable(false); break; } default: break; } setButton(command); } // 액션 리스너 @Override public void actionPerformed(ActionEvent e) { // TODO 자동 생성된 메소드 스텁 Object obj = e.getSource(); if (obj == btnTotal) { System.out.println("전체보기를 눌렀습니다."); setTitle("전체보기"); totel(); } else if (obj == btnAdd) { System.out.println("추가를 눌렀습니다."); if (cmd != ADD) { setText(ADD); return; } setTitle("데이터 추가"); add(); } else if (obj == btnCancel) { System.out.println("닫기를 눌렀습니다."); } else if (obj == btnSearch) { System.out.println("찾기를 눌렀습니다."); search(); } else if (obj == btnDel) { System.out.println("삭제를 눌렀습니다."); if (cmd != DELETE) { setText(DELETE); return; } setTitle("데이터 삭제"); delete(); } setText(NONE); } private void search() { // TODO 자동 생성된 메소드 스텁 try { // txtname에 이름이 없으면 메시지 박스를 출력하고 return String Strname = txtName.getText(); if (Strname.trim().length() < 1) { JOptionPane.showMessageDialog(null, "이름 적어"); return; } pstmtSearch = con.prepareStatement(sqlSearch); pstmtSearch.setString(1, Strname); String[] columnNames = { "번호", "이름", "이메일", "전화번호", "가입일" }; // select 구문실행 ResultSet rs = pstmtSearch.executeQuery(); ArrayList> data_arr = new ArrayList >(); if (rs.next()) { do { ArrayList imsi = new ArrayList (); imsi.add(rs.getString("CUSTOMER_ID")); imsi.add(rs.getString("NAME")); imsi.add(rs.getString("EMAIL")); imsi.add(rs.getString("TAL")); imsi.add(rs.getString("JOIDATE")); data_arr.add(imsi); } while (rs.next()); String[][] data = new String[data_arr.size()][5]; for (int i = 0; i < data_arr.size(); i++) { ArrayList al = data_arr.get(i); for (int j = 0; j < 5; j++) { data[i][j] = al.get(j); } } // 테이블에 출력하기 위한 데이터 모델 생성 DefaultTableModel model = new DefaultTableModel(data, columnNames); // 테이블 모델 적용 table.setModel(model); // 테이블 갱신 table.updateUI(); } else { JOptionPane.showMessageDialog(null, "데이터 없음"); } rs.close(); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); } finally { try { if (pstmtSearch != null) pstmtSearch.close(); } catch (SQLException e) { // TODO 자동 생성된 catch 블록 e.printStackTrace(); } } } // 모든 데이터를 보여주는 정의 메서드 private void totel() { try { pstmtTotal = con.prepareStatement(sqlTotal); // select 구문 실행 ResultSet rs = pstmtTotal.executeQuery(); String[] columnNames = { "번호", "이름", "이메일", "전화번호", "가입일" }; ArrayList > imsiData = new ArrayList >(); if (rs.next()) { do { // 하나의 행 데이터를 저장할 가변 배열 생성 ArrayList imsi = new ArrayList (); imsi.add(rs.getString("CUSTOMER_ID")); imsi.add(rs.getString("NAME")); imsi.add(rs.getString("EMAIL")); imsi.add(rs.getString("TAL")); imsi.add(rs.getString("JOIDATE")); imsiData.add(imsi); } while (rs.next()); // 테이블에 데이터를 출력하기 위해서 // 테이버베이스에서 읽어온 데이터를 2차원 배열로 반환 String[][] data = new String[imsiData.size()][5]; for (int i = 0; i < imsiData.size(); i++) { ArrayList al = imsiData.get(i); for (int j = 0; j < 5; j++) { data[i][j] = al.get(j); } } // 테이블에 출력하기 위한 데이터 모델 생성 DefaultTableModel model = new DefaultTableModel(data, columnNames); // 테이블 모델 적용 table.setModel(model); // 테이블 갱신 table.updateUI(); } else { JOptionPane.showMessageDialog(null, "데이터가 없다"); } } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); } finally { try { if (pstmtTotal != null) pstmtTotal.close(); } catch (Exception e) { } } } // 데이터를 삭제하는 사용자 정의 메서드 private void delete() { try { String strname = txtName.getText(); if (strname.trim().length() < 1) { JOptionPane.showMessageDialog(null, "이름 필수 입력"); return; } pstmtDelete = con.prepareStatement(sqlDelete); pstmtDelete.setString(1, strname); int result = pstmtDelete.executeUpdate(); if (result > 0) { JOptionPane.showMessageDialog(null, "삭제 성공"); } else { JOptionPane.showMessageDialog(null, "삭제할 이름 없음"); } } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); } finally { try { if (pstmtDelete != null) pstmtDelete.close(); } catch (Exception e) { } } } // 데이터를 추가하는 사용자 정의 메서드 private void add() { try { // 유호성 검사 - txtname에 텍스트 확인 String strname = txtName.getText(); String strEmail = txtEmail.getText(); String strTel = txtTel.getText(); if (strname.trim().length() < 1) { JOptionPane.showMessageDialog(null, "이름 필수 입력"); return; } // 삽입하는 sql 문장을 수행해 줄 Statement 생성 pstmtInsert = con.prepareStatement(sqlInsert); pstmtInsert.setString(1, strname); pstmtInsert.setString(2, strEmail); pstmtInsert.setString(3, strTel); int result = pstmtInsert.executeUpdate(); if (result > 0) { JOptionPane.showMessageDialog(null, "삽입 성공"); } else { JOptionPane.showMessageDialog(null, "삽입 실패"); } } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); } finally { try { if (pstmtInsert != null) pstmtInsert.close(); } catch (Exception e) { } } } }
Customer.java
package CustomerDB; //customer 테이블의 데이터를 표현할 클래스 public class Customer { //변수명은 특별한 경우가 아니면 테이블의 컬럼 이름을 그래도 사용 private String customer_id; private String name; private String email; private String tel; private String joidate; public Customer() { super(); // TODO 자동 생성된 생성자 스텁 } public Customer(String customer_id, String name, String email, String tel, String joidate) { super(); this.customer_id = customer_id; this.name = name; this.email = email; this.tel = tel; this.joidate = joidate; } public String getCustomer_id() { return customer_id; } public void setCustomer_id(String customer_id) { this.customer_id = customer_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getJoidate() { return joidate; } public void setJoidate(String joidate) { this.joidate = joidate; } @Override public String toString() { return "Customer [customer_id=" + customer_id + ", name=" + name + ", email=" + email + ", tel=" + tel + ", joidate=" + joidate + "]"; } //디버깅을 위한 메서드 }
Main.java
package CustomerDB; public class Main { public static void main(String[] args) { // TODO 자동 생성된 메소드 스텁 //new CustomerDBUse(); //new CopyOfCustomerDBUse_1(); new CopyOfCustomerDBUse_hachmap(); } }
'JAVA > Java' 카테고리의 다른 글
java String Calss (0) | 2015.03.18 |
---|---|
[JAVA] SocketServer (0) | 2014.11.18 |
[JAVA] Mysql DB 접속하기(Connect) (0) | 2014.11.18 |
[JAVA] Oracle DB 접속 후 Insert,select 하기 (0) | 2014.11.18 |
[JAVA] oracle DB 접속하기 (0) | 2014.11.18 |