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();
}
}