DO 클래스 패턴을 따르는 addrbook 클래스
1. AddrBook 클래스 만들기
테이블 구조와 동일한 멤버변수, getter, setter 메서드로 구성
-> 데이터 변환 처리 메서드를 제외한 비즈니스 로직등을 두는건 권장하지 않는다.
AddrBook.java
package jspbook.addrbook;
public class AddrBook {
// 멤버변수 선언
private int ab_id;
private String ab_name;
private String ab_email;
private String ab_tel;
private String ab_birth;
private String ab_comdept;
private String ab_memo;
public int getAb_id() {
return ab_id;
}
public void setAb_id(int ab_id) {
this.ab_id = ab_id;
}
public String getAb_name() {
return ab_name;
}
public void setAb_name(String ab_name) {
this.ab_name = ab_name;
}
public String getAb_email() {
return ab_email;
}
public void setAb_email(String ab_email) {
this.ab_email = ab_email;
}
public String getAb_tel() {
return ab_tel;
}
public void setAb_tel(String ab_tel) {
this.ab_tel = ab_tel;
}
public String getAb_birth() {
return ab_birth;
}
public void setAb_birth(String ab_birth) {
this.ab_birth = ab_birth;
}
public String getAb_comdept() {
return ab_comdept;
}
public void setAb_comdept(String ab_comdept) {
this.ab_comdept = ab_comdept;
}
public String getAb_memo() {
return ab_memo;
}
public void setAb_memo(String ab_memo) {
this.ab_memo = ab_memo;
}
}
-> getter, setter 메서드 [getter 및 setter 자동 생성]
2. AddrBean 클래스 만들기
DAO 클래스 패턴을 따르는 AddrBean 클래스
: 실질적으로 비즈니스 로직을 처리하는 메소드
void connect() | 데이터베이스 연결 처리 메서드 |
void disconnect() | 데이터베이스 연결 해제 메서드 |
boolean insertDB(AddrBook addrbook) | 주소록 입력 메서드 |
boolean insertDB(AddrBook addrbook) | 주소록 수정 처리 메서드 |
boolean deleteDB(int ab_id) | 주소록 삭제 메서드 |
AddrBook getDB(int ab_id) | 특정 주소록 하나를 가져오는 메서드 |
ArrayList getDBList() | 전체 주소록을 가져오는 메서드 |
-> 빈즈 클래스 : 프로그램적 요소를 가진 클래스
(1) 데이터베이스 연결 관련 변수 선언
Connection conn = null;
PreparedStatement pstmt = null;
/* Oracle 연결정보
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url = "jdbc:oracle:thin:@220.68.14.7:1521";
*/
/* MySQL 연결정보 */
String jdbc_driver = "com.mysql.jdbc.Driver";
String jdbc_url = "jdbc:mysql://127.0.0.1:3306/jspdb";
-> JDBC 드라이버와 접속 URL을 문자열 형태로 정의
(2) connect() 메서드
각 메서드에서 Connection 객체를 사용하기 전에 호출
// DB연결 메서드
void connect() {
try {
Class.forName(jdbc_driver);
conn = DriverManager.getConnection(jdbc_url,"jspbook","1234");
} catch (Exception e) {
e.printStackTrace();
}
}
-> 데이터베이스에 접속하기 위한 jdbc_driver와 jdbc_url 변수를 사용하며, 지정된 계정으로 접속
(3) disconnect() 메서드
각 메서드에서 데이터 베이스를 사용을 종료할 때 호출
-> 호출 하지 않으면 데이터베이스연결이 유지되고 시스템에 부하를 준다
//DB연결 해제 메서드
void disconnect() {
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
-> pstmt와 conn에 대해 null 체크 후, 각각 close() 메서드를 이용해 사용을 종료
(4) insertDB() 메서드
HTML 폼에서 입력된 내용을 addrbook 테이블에 저장하는 기능 수행
// 수정된 주소록 내용 갱신을 위한 메서드
public boolean updateDB(AddrBook addrbook) {
connect();
String sql ="update addrbook set ab_name=?, ab_email=?, ab_birth=?, ab_tel=?, ab_comdept=?, ab_memo=? where ab_id=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,addrbook.getAb_name());
pstmt.setString(2,addrbook.getAb_email());
pstmt.setString(3, addrbook.getAb_birth());
pstmt.setString(4,addrbook.getAb_tel());
pstmt.setString(5,addrbook.getAb_comdept());
pstmt.setString(6,addrbook.getAb_memo());
pstmt.setInt(7,addrbook.getAb_id());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally {
disconnect();
}
return true;
}
-> updateDB() 메서드 : 인자로 addrbook 객체를 참조 -> 새로 등록할 데이터 가져온다.
String sql ="update addrbook set ~ where ab_id=?"; ->update문에는 where 조건절 필수!
-> 사용자가 수정한 주소록의 ab_id 값으로 비교하고, 데이터를 수정 [ab_id 자체 값은 갱신 금지]
(5) deleteDB() 메서드
인자로 받은 ab_id 값으로 where 조건절을 통해 삭제
// 특정 주소록 게시글 삭제 메서드
public boolean deleteDB(int gb_id) {
connect();
String sql ="delete from addrbook where ab_id=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,gb_id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally {
disconnect();
}
return true;
}
(6) getDBList() 메서드
주소록 목록을 보여주는 메서드
getDB()와 비슷하지만 여러 데이터를 한꺼번에 가져오는 메서드
// 전체 주소록 목록을 가져오는 메서드
public ArrayList<AddrBook> getDBList() {
connect();
ArrayList<AddrBook> datas = new ArrayList<AddrBook>();
String sql = "select * from addrbook order by ab_id desc";
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
AddrBook addrbook = new AddrBook();
addrbook.setAb_id(rs.getInt("ab_id"));
addrbook.setAb_name(rs.getString("ab_name"));
addrbook.setAb_email(rs.getString("ab_email"));
addrbook.setAb_comdept(rs.getString("ab_comdept"));
addrbook.setAb_birth(rs.getString("ab_birth"));
addrbook.setAb_tel(rs.getString("ab_tel"));
addrbook.setAb_memo(rs.getString("ab_memo"));
datas.add(addrbook);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
disconnect();
}
return datas;
}
}
-> 여러 데이터를 처리하기 위해 각각의 행을 addrbook 객체에 담은 후에 다시 ArrayList에 넣는다.
-> 목록을 보여주는 화면에서 ArrayList로부터 addrbook 객체를 하나씩 꺼내 getter 메서드로 데이터를 가져온다.
AddrBean.java
package jspbook.addrbook;
import java.sql.*;
import java.util.*;
public class AddrBean {
Connection conn = null;
PreparedStatement pstmt = null;
/* Oracle 연결정보
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url = "jdbc:oracle:thin:@220.68.14.7:1521";
*/
/* MySQL 연결정보 */
String jdbc_driver = "com.mysql.jdbc.Driver";
String jdbc_url = "jdbc:mysql://127.0.0.1:3306/jspdb";
// DB연결 메서드
void connect() {
try {
Class.forName(jdbc_driver);
conn = DriverManager.getConnection(jdbc_url,"jspbook","1234");
} catch (Exception e) {
e.printStackTrace();
}
}
void disconnect() {
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 수정된 주소록 내용 갱신을 위한 메서드
public boolean updateDB(AddrBook addrbook) {
connect();
String sql ="update addrbook set ab_name=?, ab_email=?, ab_birth=?, ab_tel=?, ab_comdept=?, ab_memo=? where ab_id=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,addrbook.getAb_name());
pstmt.setString(2,addrbook.getAb_email());
pstmt.setString(3, addrbook.getAb_birth());
pstmt.setString(4,addrbook.getAb_tel());
pstmt.setString(5,addrbook.getAb_comdept());
pstmt.setString(6,addrbook.getAb_memo());
pstmt.setInt(7,addrbook.getAb_id());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally {
disconnect();
}
return true;
}
// 특정 주소록 게시글 삭제 메서드
public boolean deleteDB(int gb_id) {
connect();
String sql ="delete from addrbook where ab_id=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,gb_id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally {
disconnect();
}
return true;
}
// 신규 주소록 메시지 추가 메서드
public boolean insertDB(AddrBook addrbook) {
connect();
// sql 문자열 , gb_id 는 자동 등록 되므로 입력하지 않는다.
String sql ="insert into addrbook(ab_name,ab_email,ab_birth,ab_tel,ab_comdept,ab_memo) values(?,?,?,?,?,?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,addrbook.getAb_name());
pstmt.setString(2,addrbook.getAb_email());
pstmt.setString(3, addrbook.getAb_birth());
pstmt.setString(4,addrbook.getAb_tel());
pstmt.setString(5,addrbook.getAb_comdept());
pstmt.setString(6,addrbook.getAb_memo());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally {
disconnect();
}
return true;
}
// 특정 주소록 게시글 가져오는 메서드
public AddrBook getDB(int gb_id) {
connect();
String sql = "select * from addrbook where ab_id=?";
AddrBook addrbook = new AddrBook();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,gb_id);
ResultSet rs = pstmt.executeQuery();
// 데이터가 하나만 있으므로 rs.next()를 한번만 실행 한다.
rs.next();
addrbook.setAb_id(rs.getInt("ab_id"));
addrbook.setAb_name(rs.getString("ab_name"));
addrbook.setAb_email(rs.getString("ab_email"));
addrbook.setAb_birth(rs.getString("ab_birth"));
addrbook.setAb_tel(rs.getString("ab_tel"));
addrbook.setAb_comdept(rs.getString("ab_comdept"));
addrbook.setAb_memo(rs.getString("ab_memo"));
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
disconnect();
}
return addrbook;
}
// 전체 주소록 목록을 가져오는 메서드
public ArrayList<AddrBook> getDBList() {
connect();
ArrayList<AddrBook> datas = new ArrayList<AddrBook>();
String sql = "select * from addrbook order by ab_id desc";
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
AddrBook addrbook = new AddrBook();
addrbook.setAb_id(rs.getInt("ab_id"));
addrbook.setAb_name(rs.getString("ab_name"));
addrbook.setAb_email(rs.getString("ab_email"));
addrbook.setAb_comdept(rs.getString("ab_comdept"));
addrbook.setAb_birth(rs.getString("ab_birth"));
addrbook.setAb_tel(rs.getString("ab_tel"));
addrbook.setAb_memo(rs.getString("ab_memo"));
datas.add(addrbook);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
disconnect();
}
return datas;
}
}
'Application > JSP Server' 카테고리의 다른 글
[JSP] 데이터통신 구현방식, JSON과 XML (0) | 2021.05.27 |
---|---|
[JSP 프로젝트] 주소록 프로그램 (6) - 세부 기능 구현 (0) | 2021.04.28 |
[JSP 프로젝트] 주소록 프로그램 (4) - 컨트롤러 설계 및 오류 페이지 구현 (0) | 2021.04.28 |
[JSP 프로젝트] 주소록 프로그램 (3) - 데이터베이스 테이블 생성 (0) | 2021.04.28 |
[JSP 프로젝트] 주소록 프로그램 (2) - 화면 구성과 데이터베이스 구성 (0) | 2021.04.28 |