2013년 7월 6일 토요일

(130705) 10일차 Member.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 java.sql.SQLException;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.text.html.ListView;

public class Member extends JFrame implements ActionListener, ListSelectionListener{
JPanel leftPanel , rightPanel;
// 왼쪽 7개의 패널
JPanel left1, left2, left3, left4, left5, left6, left7;
// 라벨 총8개 선언
JLabel left1lb, left2lb, left3lb, left4lb, left5lb, left6lb, left7lb, rightlb;
// 텍스트필드 4개
JTextField left1tf, left2tf, left3tf, left4tf;
JComboBox<String> combo;
JRadioButton man,woman;
ButtonGroup group;
// 버튼객체 4개
JButton b1,b2,b3,b4;
// 리스트
JList<String> list;
Vector<String> listdata =new Vector<>();
//콤보 박스에 넣을 데이터 
String [] data = {"등산", "여행", "캠핑", "영화관람", "당구", "스키", "골프"};
//현제 선택된 아이템의 번지를 기억
int selected;

//데이터 베이스 연결시 필요 객체
String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id="system";
String pass="123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;

public Member() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 모든 객체 생성
leftPanel = new JPanel(); rightPanel = new JPanel(); 
left1 = new JPanel(); left2 = new JPanel(); 
left3 = new JPanel(); left4 = new JPanel(); 
left5 = new JPanel(); left6 = new JPanel();  left7 = new JPanel();
left1lb = new JLabel( "       회     원     가     입     ");
left2lb = new JLabel( "  아 이 디 :  ");    left3lb = new JLabel( "  패 스 워 드  : ");
left4lb = new JLabel( "  전     화 :  ");    left5lb = new JLabel( "   주     소    :");
left6lb = new JLabel( "  취     미 :  ");    left7lb = new JLabel( "   성     별    : ");
rightlb = new JLabel( "    모     든     회     원     보    기  ");
left1tf = new JTextField(15) ; left2tf = new JTextField(15) ; 
left3tf = new JTextField(15) ; left4tf = new JTextField(15) ;
combo = new JComboBox<String>(data);
man = new JRadioButton("남"); woman = new JRadioButton("여");
group = new ButtonGroup();
group.add(man);group.add(woman);
b1=new JButton("입력"); b2=new JButton("수정"); 
b3=new JButton("삭제"); b4=new JButton("검색");
list = new JList<String>(listdata);

// 배치
left1.add(left2lb); left1.add(left1tf); 
left2.add(left3lb); left2.add(left2tf); 
left3.add(left4lb); left3.add(left3tf); 
left4.add(left5lb); left4.add(left4tf); 
left5.add(left6lb); left5.add(combo);
left6.add(left7lb); left6.add(man);left6.add(woman);
left7.add(b1);  left7.add(b2);  left7.add(b3);  left7.add(b4);

// 이벤트 부착
b1.addActionListener(this); b2.addActionListener(this); 
b3.addActionListener(this); b4.addActionListener(this);   
list.addListSelectionListener(this);

// 새로운 레이아웃 생성후 배치
leftPanel.setLayout(new GridLayout(8,1));
leftPanel.add(left1lb); leftPanel.add(left1); 
leftPanel.add(left2); leftPanel.add(left3); 
leftPanel.add(left4); leftPanel.add(left5); 
leftPanel.add(left6); leftPanel.add(left7);
// 새로운 레이아웃 생성후 배치
rightPanel.setLayout(new BorderLayout());
rightPanel.add("North" , rightlb);
rightPanel.add(list);
// 프레임을 그리드로 나눔
setLayout(new GridLayout(1,2));
this.add(leftPanel); this.add(rightPanel);

setSize(600,400);
setVisible(true);
con();
}
public static void main(String[] args) {
new Member();
}


@Override
public void actionPerformed(ActionEvent e) {

String command = e.getActionCommand();
if(command.equals("입력")){
this.insertMember();
}
else if(command.equals("수정")){
this.updateMember();
this.getAllMember();
}
else if(command.equals("삭제")){
this.deleteMember();
this.getAllMember();
}
else if(command.equals("검색")){
this.getAllMember();
}
}


@Override
public void valueChanged(ListSelectionEvent e1) {
try{
// 클릭한 데이터를 가져옴
String data = list.getSelectedValue();
selected = list.getSelectedIndex();

//잘게 데이터를쪼개서 맴버에 넣어줌
String spilt[] = data.split("  ");
left1tf.setText(spilt[0]);
left2tf.setText(spilt[1]);
left3tf.setText(spilt[2]);
left4tf.setText(spilt[3]);
combo.setSelectedItem(spilt[4]);
if(spilt[5].equals("남"))
man.setSelected(true);
else
woman.setSelected(true);
}catch (Exception e) {
}
}


// 데이터 베이스에 접근 가능하도록 커넥션을 설정
public void con(){
try {
// 1.어느 데이터 베이스를 사용할건지를 설정 
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.실제 데이터 베이스에 접근하기위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass); 
} catch (Exception e) {
e.printStackTrace();
}
}


// 입력 버튼을 누르면 실행되는 메소드
public void insertMember(){
// 데이터를 모두 입력 받은후에 데이터 베이스에 연결하여 데이터를 삽입
String id = left1tf.getText().trim();
int pass = Integer.parseInt(left2tf.getText().trim());
String phone = left3tf.getText().trim();
String address = left4tf.getText().trim();
String hobby = combo.getSelectedItem().toString();
String gender ="";
if(man.isSelected())
gender = "남";
else
gender = "여";

// 쿼리를 준비
String sql = "insert into member values(?, ?, ?, ?, ?, ?)";
// 쿼리를 실행시켜 주는 객체 생성
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setInt(2, pass);
pstmt.setString(3, phone);
pstmt.setString(4, address);
pstmt.setString(5, hobby);
pstmt.setString(6, gender);
//쿼리를 실행 하시오
pstmt.executeUpdate();
//자원 반납
pstmt.close();   
} catch (SQLException e) {
e.printStackTrace();
}
//리스트에다가 회원 정보를 하나의 스트링으로 만든후에 뿌려줌
getAllMember();
}


public void getAllMember(){
// 벡터 초기화
listdata.removeAllElements();
// 쿼리 준비
String sql="select * from member";
// 커리를 실행하기 위한 객체를 선언
try {
pstmt = con.prepareStatement(sql);
//결과를 리턴 받기에 resultset객체를 선언해서 받음
rs = pstmt.executeQuery();
//반복문을 이용하여 데이터를 가져와서 리스트에 붙임
while(rs.next()){
String total="";
total += rs.getString(1)+"  ";
total += rs.getInt(2)+"  ";
total += rs.getString(3)+"  ";
total += rs.getString(4)+"  ";
total += rs.getString(5)+"  ";
total += rs.getString(6);
//리스트에 부착
listdata.add(total);
}   
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
//백터에 있는 데이터를 리스트에 부착
list.setListData(listdata);
}


// 삭제하는 메소드
private void deleteMember() {
String id = left1tf.getText().trim();
String sql="delete from member   where id =?";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);

pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
}
listdata.remove(selected); // list에 선택되어있는 벡터의 listdata 삭제
}


//수정하는 메소드
private void updateMember() {
String id = left1tf.getText().trim();
String phone = left3tf.getText().trim();
String address = left4tf.getText().trim();
String sql="update member set phone=?, address=?  where id =?";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, phone);
pstmt.setString(2, address);
pstmt.setString(3, id);

pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}


 - 데이터베이스 테이블









 - 검색















 - 입력






















 - 수정






















 - 삭제






















 - ListSelectionEvent를 이용해서 정보 가져오기