☆ Customer.java
public class Customer extends JFrame {
// BorderLayout 사용
JPanel panWest, panSouth, p1, p2, p3;
JTextField txtIdx, txtName, txtAddress;
JButton btnInsert, btnDelete, btnSelect;
JTable table;
Connection con;
Statement stmtSelect, stmtScroll;
PreparedStatement pstmtInsert, pstmtDelete, pstmtScroll;
//rsScroll : rs.next()로 내려갔을 때 다시 올라가서 몇 행인지 알려주기 위해 사용
ResultSet rs, rsScroll;
ResultSetMetaData rsmd; // 테이블정보(메타데이터)
public Customer() {
panWest = new JPanel(new GridLayout(3, 0));
p1 = new JPanel(new FlowLayout());
p1.add(new JLabel("번 호"));
p1.add(txtIdx = new JTextField(12));
panWest.add(p1);
p2 = new JPanel(new FlowLayout());
p2.add(new JLabel("이 름"));
p2.add(txtName = new JTextField(12));
panWest.add(p2);
p3 = new JPanel(new FlowLayout());
p3.add(new JLabel("주 소"));
p3.add(txtAddress = new JTextField(12));
panWest.add(p3);
add(panWest, BorderLayout.WEST);
panSouth = new JPanel();
panSouth.add(btnSelect = new JButton("조회"));
panSouth.add(btnInsert = new JButton("추가"));
panSouth.add(btnDelete = new JButton("삭제"));
add(panSouth, BorderLayout.SOUTH);
// 버튼과 리스너 연결
btnSelect.addActionListener(lisner);
btnInsert.addActionListener(lisner);
btnDelete.addActionListener(lisner);
setBounds(100, 100, 700, 300);
setVisible(true);
// 윈도우 창 모두 닫기
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 윈도우 창에서 새 창 열리는 것만 닫기
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
// 4단계 - 내부 익명 클래스
ActionListener lisner = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource(); // 버튼 받아옴
if(obj == btnSelect) {
// System.out.println("Select!");
select();
} else if(obj == btnInsert) {
// System.out.println("Insert!");
insert();
} else if(obj == btnDelete) {
// System.out.println("Delete!");
delete();
}
}
};
private void connectDB() {
try {
// 1단계 - 드라이버 로드
Class.forName("com.mysql.jdbc.Driver");
// 2단계 - Connection 객체 생성
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/study",
"root", "1234");
System.out.println("드라이버 로드, DB 접속 성공!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
} catch (SQLException e) {
System.out.println("DB 접속 실패!");;
}
}
private void closeDB() {
if(rs != null) try { rs.close(); } catch (Exception e) {};
if(stmtSelect != null) try { stmtSelect.close(); } catch (Exception e) {};
if(stmtScroll != null) try { stmtScroll.close(); } catch (Exception e) {};
if(pstmtInsert != null) try { pstmtInsert.close(); } catch (Exception e) {};
if(pstmtDelete != null) try { pstmtDelete.close(); } catch (Exception e) {};
if(pstmtScroll != null) try { pstmtScroll.close(); } catch (Exception e) {};
if(con != null) try { con.close(); } catch (Exception e) {};
}
private void select() {
int rows, cols;
String[] colName;
// String[] colName={"번호","이름","주소"};
Object[][] data;
String sql = "select idx as '번호',name as '이름',address as '주소' from customer;";
connectDB();
try {
stmtSelect = con.createStatement();
stmtScroll = con.createStatement();
rs = stmtSelect.executeQuery(sql);
rsmd = rs.getMetaData(); //테이블 정보를 저장
// rs는 한번 전진하면 되돌아오기 어렵기 때문에
// rsScroll 변수가 대신해서 마지막 레코드까지 전진
rsScroll = stmtScroll.executeQuery(sql);
// 마지막 레코드까지 전진시킴
// 레코드(행) 갯수 파악 가능
rsScroll.last(); //while 안쓰고도 한방에 끝까지 내려감
rows = rsScroll.getRow(); // 레코드(행) 수
cols = rsmd.getColumnCount(); // 필드(열) 수
//제목 행 받아오기
colName = new String[cols];
for(int i=0; i<cols; i++){
colName[i] = rsmd.getColumnLabel(i+1);
}
//내용 받아오기
data = new Object[rows][cols];
int rowCount = 0;
while(rs.next()){
for(int colCount = 0; colCount<cols; colCount++){
data[rowCount][colCount] = rs.getObject(colCount+1);
}
rowCount++;
}
table = new JTable(data, colName);
add(new JScrollPane(table));
setVisible(true);
} catch (SQLException e) {
System.out.println("SQL 구문 에러");
}finally{
closeDB();
}
}
private void insert() {
String strIdx;
String strName;
String strAddress;
String sql = "INSERT INTO customer " +
"VALUES (?,?,?);";
connectDB();
strIdx = txtIdx.getText();
strName = txtName.getText();
strAddress = txtAddress.getText();
// (||:버티컬 bar)
if(strIdx.length() < 1 || strName.length() < 1) {
JOptionPane.showMessageDialog(
null, "번호와 이름은 필수 입력!");
return;
}
try {
// 3단계 - PreparedStatement 객체 생성
pstmtInsert = con.prepareStatement(sql);
pstmtInsert.setInt(1, Integer.parseInt(strIdx));
pstmtInsert.setString(2, strName);
pstmtInsert.setString(3, strAddress);
// 4단계 - SQL 문장 실행 후 결과 처리
pstmtInsert.executeUpdate();
JOptionPane.showMessageDialog(
null, "회원 추가 완료!");
txtIdx.setText("");
txtName.setText("");
txtAddress.setText("");
} catch (SQLException e) {
System.out.println("INSERT 구문 에러!");
} finally {
closeDB();
}
}
private void delete() {
String strIdx;
connectDB();
strIdx = JOptionPane.showInputDialog(
null, "삭제할 회원 번호를 입력하세요!");
String sql = "delete from customer where idx=?";
try {
pstmtDelete = con.prepareStatement(sql);
pstmtDelete.setInt(1, Integer.parseInt(strIdx));
pstmtDelete.executeUpdate();
JOptionPane.showMessageDialog(null, "회원 삭제 완료!");
} catch (Exception e) {
System.out.println("Delete 구문 에러!");
}finally{
closeDB();
}
}
public static void main(String[] args) {
new Customer();
}
}
* 회원 추가 결과
4번 행에 이름과 주소 추가(1~3번은 연습 과정에서 이미 들어가 있음)
회원 추가 완료!
삭제 버튼을 누르면 창만 뜨게 해놨음
mysql에서 검색해보까
한글처리 해주고
customer 테이블에 4번 행이 추가된 것을 볼 수 있다.
* update문으로 제목 행 이름 바꿔주기
select idx as '번호', name as '이름', address as '주소' from customer;
* swing 폼 완성 결과
조회 버튼을 누르면 오른쪽에 창이 나오면서 회원정보가 조회된다.
8번에 새로운 내용을 추가해보자. 번호, 이름, 주소란을 입력하고 추가 버튼을 누르면 완료된다.
삭제도 가능하다.
금방 만든 크레용팝이를 삭제하려면 8번을 누른다.
삭제 완료옷!
ㅎ_ㅎ
'N스크린하이브리드앱과정 > JAVA' 카테고리의 다른 글
[7주][5일][3~4th] JAVA: Mysql Workbench 설치(mysql 윈도 버전) - 자바 끝! (0) | 2013.08.30 |
---|---|
[7주][3일][3~4th] JAVA: awt보다 좋은 swing? (0) | 2013.08.28 |
[7주][2일][3~4th] JAVA: JDBC 용어 정리, insert/update/delete/select (0) | 2013.08.27 |
[7주][1일][3~4th] JAVA: JDBC 용어 정리, 이클립스에서 JDBC 설정. (0) | 2013.08.26 |
[6주차 과제] JAVA: 1~5단계 만들기, 계산기 만들기 (0) | 2013.08.25 |