[Swing 실습 - 회원관리 프로그램] MemberModel

2009. 6. 23. 17:49 - 에릭투스

package table;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

import oracle.jdbc.pool.OracleDataSource;

public class MemberModel extends AbstractTableModel {
 Object[][] obj = {
  {1, "박성완", "수원시 천천동"},
  {2, "전완진", "부자들만 사는 다리밑"},
  {3, "유경현", "구름다리밑"}
 };
 
 ArrayList<MemberBean> data;
 
 String[] colName = {"회원번호", "이름", "주소"};
 
 OracleDataSource ds;
 
 public MemberModel() {
  try {
   ds = new OracleDataSource();
   ds.setURL("jdbc:oracle:thin:@211.234.53.67:1521:orcl");
  } catch (SQLException e) {
   e.printStackTrace();
  }
  init();
 }
 
 public void init() {
  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
  data = new ArrayList<MemberBean>();
  try {
   conn = ds.getConnection("scott", "tiger");
   stmt = conn.createStatement();
   rs = stmt.executeQuery("select * from test");
   while(rs.next()) {
    MemberBean bean = new MemberBean();
    bean.setNo(rs.getInt("no"));
    bean.setName(rs.getString("name"));
    bean.setAddr(rs.getString("addr"));
    data.add(bean); // 멤버변수에 Bean의 객체를 담는다
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    if(rs != null) rs.close();
    if(stmt != null) stmt.close();
    if(conn != null) conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }


 // 필수 구현해야될 메소드들
 // 컬럼(열) 개수
 public int getColumnCount() {
  // 회원번호, 이름, 주소
  return colName.length;
 }

 // 로우(행) 개수
 public int getRowCount() {
  return data.size();
 }

 // 특정 셀에 값을 넣어주는 메소드
 public Object getValueAt(int rowIndex, int columnIndex) {
  MemberBean bean = data.get(rowIndex);
  switch(columnIndex) {
   case 0:
    return bean.getNo();
   case 1:
    return bean.getName();
   case 2:
    return bean.getAddr();
  }
  return null; // 컴파일 오류 방지용
//  return obj[rowIndex][columnIndex];
 }

 // 여기서부턴 선택적 구현 메소드들
 // 컬럼명을 다른걸로 바꾸는 메소드
 @Override // annotation 반드시 오버라이딩 조건에 만족해야 한다.
 public String getColumnName(int column) {
  return colName[column];
 }
 
 // 컬럼의 클래스 타입에 따라 화면에 보여지는 모습이 바뀐다
 @Override
 public Class<?> getColumnClass(int columnIndex) {
  // 0번 행의 각 컬럼의 클래스 타입을 리턴하는 형식
  Object o = getValueAt(0, columnIndex);
  return o.getClass();
 }
 // cell 수정을 가능하게 해주는 메소드
 @Override
 public boolean isCellEditable(int rowIndex, int columnIndex) {
  return false; //수정 불가능하게...
 }
 
 // 수정한 값을 적용되게끔 해주는 메소드
 @Override
 public void setValueAt(Object value, int rowIndex, int columnIndex) {
  obj[rowIndex][columnIndex] = value;
 }
 
 // 회원추가 이름, 주소, (나이, 성별, 회원등급...) 필요
 public void addMember(MemberBean bean) {
  // insert 로직
  Connection conn = null;
  PreparedStatement pstmt = null;
  String sql = "insert into test values (   \n"
   + "(select nvl(max(no),0)+1 from test) \n"
   + ", ?, ?)            \n";
  try {
   conn = ds.getConnection("scott", "tiger");
   pstmt = conn.prepareStatement(sql);
   pstmt.setString(1, bean.getName());
   pstmt.setString(2, bean.getAddr());
   pstmt.executeUpdate();
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    if(pstmt != null) pstmt.close();
    if(conn != null) conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }

 public void delMember(int no) {
  Connection conn = null;
  PreparedStatement pstmt = null;
  String sql = "delete from test  \n"
   + "where no = ?       \n";
  try {
   conn = ds.getConnection("scott", "tiger");
   pstmt = conn.prepareStatement(sql);
   pstmt.setInt(1, no);
   pstmt.executeUpdate();
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    if(pstmt != null) pstmt.close();
    if(conn != null) conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  } 
 }
}

다른 카테고리의 글 목록

자바 기본 공부/스윙 기초 카테고리의 포스트를 톺아봅니다