2013년 7월 4일 목요일

(130704) 9일차 JoinDb.java (JoinForm.java에 AWT Event, JDBC 적용)

 - 소스
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.swing.*;

public class JoinDb extends JFrame implements ActionListener {

JLabel label [] = new JLabel [11]; // Label 배열로 선언
JTextField textfield[] = new JTextField [5]; // TextField 배열로 선언
JTextArea textarea = new JTextArea(); // TextArea 선언
JScrollPane sp; // TextArea의 스크롤바를 위한 ScrollPane 선언

JRadioButton male, female; // RadioButton 선언
JCheckBox travel, sleep; // CheckBos 선언
ButtonGroup bg; // RadioButton의 그룹핑을 위한 ButtonGroup 선언
JButton trans, cancel; // Button 선언
JComboBox<String> jcb; // ComboBox 선언
String phone [] = {"010", "011", "016", "017", "018", "019", "070"}; // ComboBox를 위한 배열 선언

JPanel panel1, panel2, panel3, panel4, panel5, panel6;
JPanel panel11, panel12, panel21, panel22, panel31, panel32, panel41, panel42;

// DB 연동을 위한 준비
String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id = "system";
String pass = "123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;

public JoinDb() {

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

GridLayout frameLayout = new GridLayout(6, 1); // 전체적인 큰 틀을 GridLayout으로 설정
frameLayout.setVgap(3); // GridLayout간의 간격 설정
this.setLayout(frameLayout); // 설정한 Layout을 set

label[0] = new JLabel("아이디"); 
label[1] = new JLabel("비밀번호");
label[2] = new JLabel("이름");
label[3] = new JLabel("성별");
label[4] = new JLabel("취미");
label[5] = new JLabel("H.P");
label[6] = new JLabel("자기소개");
label[7] = new JLabel("*8자이내");
label[8] = new JLabel("*필수입력");
label[9] = new JLabel("-");
label[10] = new JLabel("-");

textfield[0] = new JTextField(8); // 아이디
textfield[1] = new JTextField(8); // 비밀번호
textfield[2] = new JTextField(8); // 이름
textfield[3] = new JTextField(3); // H.P
textfield[4] = new JTextField(3); // H.P
textarea = new JTextArea(1, 1); // 자기소개

male = new JRadioButton("남성");
female = new JRadioButton("여성");

bg = new ButtonGroup();
bg.add(male);
bg.add(female);

travel = new JCheckBox("여행");
sleep = new JCheckBox("잠자기");

jcb = new JComboBox<String>(phone);

trans = new JButton("전송");
cancel = new JButton("취소");

panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
panel5 = new JPanel();
panel6 = new JPanel();

panel11 = new JPanel();
panel12 = new JPanel();
panel21 = new JPanel();
panel22 = new JPanel();
panel31 = new JPanel();
panel32 = new JPanel();
panel41 = new JPanel();
panel42 = new JPanel();

BorderLayout layout1 = new BorderLayout();
BorderLayout layout2 = new BorderLayout();
BorderLayout layout3 = new BorderLayout();
BorderLayout layout4 = new BorderLayout();
BorderLayout layout5 = new BorderLayout();
panel1.setLayout(layout1);
panel2.setLayout(layout2);
panel3.setLayout(layout3);
panel4.setLayout(layout4);
panel5.setLayout(layout5);

panel11.add(label[0]); // 이름
panel11.add(textfield[0]); // 이름
panel12.add(label[7]); // *8자이내
panel1.add("West", panel11); // BorderLayout의 왼쪽
panel1.add("East", panel12); // BorderLayout의 오른쪽

panel21.add(label[1]); // 비밀번호
panel21.add(textfield[1]); // 비밀번호
panel22.add(label[2]); // 성명
panel22.add(textfield[2]); // 성명
panel2.add("West", panel21); // BorderLayout의 왼쪽
panel2.add("East", panel22); // BorderLayout의 오른쪽

panel31.add(label[3]); // 성별
panel31.add(male); // 성별 남성
panel31.add(female); // 성별 여성
panel32.add(label[4]); // 취미
panel32.add(travel); // 취미 여행
panel32.add(sleep); // 취미 잠자기
panel3.add("West", panel31); // BorderLayout의 왼쪽
panel3.add("East", panel32); // BorderLayout의 오른쪽

panel41.add(label[5]); // H.P
panel41.add(jcb); // ComboBox
panel41.add(label[9]); // -
panel41.add(textfield[3]); // H.P
panel41.add(label[10]); // -
panel41.add(textfield[4]); // H.P
panel42.add(label[8]); // *필수입력
panel4.add("West", panel41); // BorderLayout의 왼쪽
panel4.add("East", panel42); // BorderLayout의 오른쪽

panel5.add("West", label[6]); // 자기소개
sp = new JScrollPane(textarea); // TextArea에 ScrollPane을 적용
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
panel5.add(sp); // TextArea에 적용된 ScrollPane을 붙임

panel6.add(trans); // 전송
panel6.add(cancel); // 취소

this.add(panel1);
this.add(panel2);
this.add(panel3);
this.add(panel4);
this.add(panel5);
this.add(panel6);

// 버튼에 이벤트를 부착
// implements ActionListener - 내 클래스에서 받았으므로 this
trans.addActionListener(this);
cancel.addActionListener(this);

setTitle("회원가입 폼!!");
setSize(400, 350);
setVisible(true);
}

public static void main(String[] args) {
new JoinDb();
}

@Override // interface를 구현하였으므로 ActionListener의 actionPerformed 오버라이딩 필요
public void actionPerformed(ActionEvent e){
String data = e.getActionCommand(); // 버튼의 라벨값을 리턴
if(data.equals("전송")){
try {
// 1. 어느 데이터베이스를 사용할 것인지를 설정
Class.forName("oracle.jdbc.driver.OracleDriver"); // 대소문자 구문
// 2. 실제 데이터 베이스에 접근하기 위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass);

System.out.println("오라클에 접속 완료");

// 모든 데이터를 가져오시오
String sql = "insert into member values(?, ?, ?, ?, ?, ?, ?)";
// 3. 쿼리를 날리기위한 객체를 선언
pstmt = con.prepareStatement(sql);

// ?에 데이터를 입력
pstmt.setString(1, textfield[0].getText()); // ID
pstmt.setString(2, textfield[1].getText()); // PASS
pstmt.setString(3, textfield[2].getText()); // NAME
if(male.isSelected()) // GENDER
pstmt.setInt(4, 1);
else
pstmt.setInt(4, 2);
if(travel.isSelected()) // HOBBY
pstmt.setString(5, travel.getText());
if(sleep.isSelected())
pstmt.setString(5, sleep.getText());
pstmt.setString(6, jcb.getSelectedItem()+"-"+textfield[3].getText()+"-"+textfield[4].getText()); // PHONE
pstmt.setString(7, textarea.getText()); // INTRODUCE

// 4. 쿼리실행 = 데이터를 돌려 받을때
pstmt.executeUpdate();

// 5. 다 썻으면 자원을 닫아라
pstmt.close();
con.close();

} catch (Exception e2) {
e2.printStackTrace();

}

if(data.equals("취소")){
textfield[0].setText("");
textfield[1].setText("");
textfield[2].setText("");
male.setSelected(true);
travel.setSelected(false);
sleep.setSelected(false);
textfield[3].setText("");
textfield[4].setText("");
textarea.setText("");
}
}
}


 - 결과