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();
}
}
}
}
'자바 기본 공부 > 스윙 기초' 카테고리의 다른 글
[ Swing 기초 ] 마지막 스윙 (0) | 2009.06.23 |
---|---|
[Swing 실습 - 회원관리프로그램] MemberBean (0) | 2009.06.23 |
[Swing 실습 - 회원관리 프로그램] MemberView (0) | 2009.06.23 |
[Swing 기초] 스윙 기초 마무리 (0) | 2009.06.23 |
[Swing 기초] 스윙 기본 Component (0) | 2009.06.23 |