JFrame: Swing의 JFrame 클래스를 확장하여 GUI 창을 구성합니다.
JPanel: Swing의 JPanel 클래스를 사용하여 여러 컴포넌트를 그룹화하고 배치합니다.
JTextField: 사용자 입력을 받는 텍스트 필드입니다.
JButton: 사용자가 클릭하여 이벤트를 발생시키는 버튼입니다.
JTable: 데이터베이스의 정보를 표시하는 테이블입니다.
DefaultTableModel: JTable에 데이터를 제공하는 모델 클래스입니다.
PreparedStatement: SQL 문을 실행하기 위한 준비된 문(statement) 객체입니다.
ConnectionHelper: 데이터베이스 연결을 도와주는 클래스로, JDBC 드라이버 로드 및 Connection 객체를 제공합니다.
추가 (Add): 고객 정보를 입력받아 데이터베이스에 추가합니다.
삭제 (Delete): 고객 번호를 입력받아 해당 고객 정보를 데이터베이스에서 삭제합니다.
검색 (Search): 고객 이름을 입력받아 해당하는 고객 정보를 데이터베이스에서 검색하여 테이블에 표시합니다.
수정 (Update): 고객 번호를 입력받아 해당 고객 정보를 수정합니다.
전체 보기 (Total): 데이터베이스에 저장된 모든 고객 정보를 테이블에 표시합니다.
초기화 (Init): 입력 필드를 초기화하여 다음 작업을 준비합니다.
아래는 프로그램에서 사용된 주요 코드입니다.
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import ex01.jdbc.ConnectionHelper;
public class JDBCProjectEx3 extends JFrame {
// 컴포넌트 및 변수 선언
JPanel panWest, panSouth;
JTextField txtNo, txtName, txtEmail, txtPhone;
JButton btnTotal, btnAdd, btnDel, btnSearch, btnCancel, btnUpdate;
JTable table;
MyModel model;
int cmd = NONE;
// SQL 쿼리 정의
private String sqlInsert = "INSERT INTO CUSTOMER VALUES (?, ?, ?, ?)";
private String sqlDelete = "DELETE FROM CUSTOMER WHERE CODE = ?";
private String sqlSelect = "SELECT * FROM CUSTOMER";
private String sqlSearch = "SELECT * FROM CUSTOMER WHERE NAME = ?";
private String sqlUpdate = "UPDATE CUSTOMER SET NAME = ?, EMAIL = ?, PHONE = ? WHERE CODE = ?";
// 데이터베이스 관련 객체 선언
Connection conn;
PreparedStatement pstmtInsert, pstmtDelete, pstmtUpdate;
PreparedStatement pstmtSelect, pstmtSelectScroll;
PreparedStatement pstmtSearch, pstmtSearchScroll;
public JDBCProjectEx3() {
// GUI 컴포넌트 초기화 및 배치
// ... 생략 (JPanel, JTextField, JButton 등 초기화)
// 버튼 이벤트 리스너 등록
btnTotal.addActionListener(this::actionPerformed);
btnAdd.addActionListener(this::actionPerformed);
btnDel.addActionListener(this::actionPerformed);
btnSearch.addActionListener(this::actionPerformed);
btnCancel.addActionListener(this::actionPerformed);
btnUpdate.addActionListener(this::actionPerformed);
// 테이블 설정
add(new JScrollPane(table = new JTable()), "Center");
// 데이터베이스 연결 및 초기 데이터 로드
dbConnect();
total();
// 프레임 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 700, 300);
setVisible(true);
}
// 데이터베이스 연결 초기화
public void dbConnect() {
try {
conn = ConnectionHelper.getConnection("oracle");
pstmtInsert = conn.prepareStatement(sqlInsert);
pstmtDelete = conn.prepareStatement(sqlDelete);
pstmtSelect = conn.prepareStatement(sqlSelect);
pstmtSearch = conn.prepareStatement(sqlSearch);
pstmtUpdate = conn.prepareStatement(sqlUpdate);
pstmtSelectScroll = conn.prepareStatement(sqlSelect, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
pstmtSearchScroll = conn.prepareStatement(sqlSearch, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
} catch (Exception e) {
e.printStackTrace();
}
}
// 버튼 이벤트 처리 메소드
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
// 각 버튼에 따른 처리
if (obj == btnAdd) {
// 추가 기능 처리
if (cmd != ADD) {
setText(ADD);
return;
}
setTitle(e.getActionCommand());
add();
} else if (obj == btnDel) {
// 삭제 기능 처리
if (cmd != DELETE) {
setText(DELETE);
return;
}
setTitle(e.getActionCommand());
del();
} else if (obj == btnSearch) {
// 검색 기능 처리
if (cmd != SEARCH) {
setText(SEARCH);
return;
}
setTitle(e.getActionCommand());
search();
} else if (obj == btnUpdate) {
// 수정 기능 처리
if (cmd != UPDATE) {
setText(UPDATE);
return;
}
setTitle(e.getActionCommand());
update();
} else if (obj == btnTotal) {
// 전체 보기 기능 처리
setTitle(e.getActionCommand());
total();
}
setText(NONE);
init();
}
// 데이터베이스에 고객 정보 추가
private void add() {
try {
String strNo = txtNo.getText();
String strName = txtName.getText();
String strMail = txtEmail.getText();
String strPhone = txtPhone.getText();
pstmtInsert.setInt(1, Integer.parseInt(strNo));
pstmtInsert.setString(2, strName);
pstmtInsert.setString(3, strMail);
pstmtInsert.setString(4, strPhone);
pstmtInsert.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
JOptionPane.showMessageDialog(null, "추가되었습니다.");
}
// 데이터베이스에서 고객 정보 삭제
private void del() {
try {
String strNo = txtNo.getText();
pstmtDelete.setString(1, strNo);
pstmtDelete.executeUpdate();
JOptionPane.showMessageDialog(null, "삭제되었습니다.");
total();
} catch (Exception e) {
e.printStackTrace();
}
}
// 데이터베이스에서 고객 정보 검색
private void search() {
try {
String strName = txtName.getText();
pstmtSearchScroll.setString(1, strName);
ResultSet rsScroll = pstmtSearchScroll.executeQuery();
pstmtSearch.setString(1, strName);
ResultSet rs = pstmtSearch.executeQuery();
if (model == null) model = new MyModel();
model.getRowCount(rsScroll);
model.setData(rs);
table.setModel(new DefaultTableModel(model.data, model.columnName));
table.updateUI();
} catch (Exception e) {
e.printStackTrace();
}
}
// 데이터베이스에서 모든 고객 정보 조회
public void total() {
try {
ResultSet rs = pstmtSelect.executeQuery();
ResultSet rsScroll = pstmtSelectScroll.executeQuery();
if (model == null) model = new MyModel();
model.getRowCount(rsScroll);
model.setData(rs);
table.setModel(new DefaultTableModel(model.data, model.columnName));
table.updateUI();
} catch (Exception e) {
e.printStackTrace();
}
}
// 입력 필드 초기화
private void init() {
txtNo.setText("");
txtName.setText("");
txtEmail.setText("");
txtPhone.setText("");
}
// 입력 필드 활성화 설정
private void setText(int command) {
switch (command) {
case ADD:
txtNo.setEditable(true);
txtName.setEditable(true);
txtEmail.setEditable(true);
txtPhone.setEditable(true);
break;
case DELETE:
txtNo.setEditable(true);
break;
case SEARCH:
txtName.setEditable(true);
break;
case UPDATE:
txtNo.setEditable(true);
break;
}
setButton(command);
}
// 버튼 활성화 설정
private void setButton(int command) {
btnTotal.setEnabled(false);
btnAdd.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 SEARCH:
btnSearch.setEnabled(true);
cmd = SEARCH;
break;
case UPDATE:
btnUpdate.setEnabled(true);
cmd = UPDATE;
break;
case TOTAL:
btnTotal.setEnabled(true);
cmd = TOTAL;
break;
case NONE:
btnTotal.setEnabled(true);
btnAdd.setEnabled(true);
btnDel.setEnabled(true);
btnSearch.setEnabled(true);
btnCancel.setEnabled(true);
btnUpdate.setEnabled(true);
cmd = NONE;
break;
}
}
// 메인 메소드: 프로그램 실행
public static void main(String[] args) {
new JDBCProjectEx3();
}
}
프로그램을 실행하면 GUI 창이 표시됩니다.
각 버튼을 클릭하여 고객 정보를 추가, 삭제, 검색, 수정할 수 있습니다.
테이블에는 데이터베이스에 저장된 고객 정보가 표시됩니다.
이 프로그램을 통해 Java Swing을 사용하여 JDBC와 데이터베이스를 연동하는 기본적인 방법을 익힐 수 있습니다.






