1. USERINFO 데이터 베이스
오라클에서 USERID, USERPW, USERNAME, PHONENO, CHARGE, BLACKLIST 컬럼을 가진 된 USERINFO 테이블을 생성.
2. 프로그램 로직 설계
자바에서 만들어서 실행할 프로그램은 [1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT] 5개의 메뉴를 가진다.
사용할 SQL문은
1) INSERT
INSERT INTO USERINFO
(USERID, USERPW, USERNAME, PHONENO, CHARGE, BLACKLIST)
VALUSE(?, ?, ?, ?, 5000, 'N')
-- 아이디, 패스워드, 이름, 전화번호를 입력받는다.
-- CHARGE는 기본 5000, BLACKLIST는 기본 N으로 입력받는다.
2) SELECT
SELECT USERID, USERPW, USERNAME, PHONENO, CHARGE, BLACKLIST
FROM USERINFO WHERE USERID = ?
-- 유저 아이디를 입력받아 해당 아이디의 정보를 출력한다.
3) UPDATE
UPDATE USERINFO SET USERPW = ?, USERNAME = ?, PHONENO = ? WHERE USESRID = ?
-- 유저 아이디를 입력받아 해당 아이디의 정보를 수정한다.
4) DELETE
DELETE FROM USERINFO WHERE USESRID = ?
-- 유저 아이디를 입력받아 해당 아이디의 정보를 삭제한다.
5) QUIT
프로그램 실행 종료
3. 데이터베이스의 내용을 담을 자바빈즈 UserDTO
package 빈즈;
import java.sql.*;
public class UserDTO {
private String userId; // 사용자ID
private String userPw; // 사용자PW
private String userName; // 사용자 이름
private String phoneNo; // 전화번호
private int chargeBalance; // 충전금액
private char blacklist; // 블랙리스트
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
public int getChargeBalance() {
return chargeBalance;
}
public void setChargeBalance(int chargeBalance) {
this.chargeBalance = chargeBalance;
}
public char getBlacklist() {
return blacklist;
}
public void setBlacklist(char blacklist) {
this.blacklist = blacklist;
}
}
4. 접속 부분을 담당할 ConnectDAO
- excute()라는 메소드를 만들어서 init(), query(), close() 3개의 메소드를 실행시킨다.
- init는 접속을 담당, query는 서브클래스에서 반드시 쿼리를 구현할 추상(abstract) 메소드, close는 접속 종료를 담당할 메소드.
package 빈즈;
import java.sql.*;
public abstract class ConnectDAO {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public final void excute() {
try {
init();
query();
close();
}
catch (Exception e) {
e.getMessage();
}
}
public void init() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@211.183.9.66:1521:xe", "st02", "st02");
}
public abstract void query() throws Exception;
private void close() {
if(rs != null)try {rs.close();} catch (Exception e) {}
if(pstmt != null)try {pstmt.close();} catch (Exception e) {}
if(conn != null)try {conn.close();} catch (Exception e) {}
}
}
5. 로직을 계승시킬 인터페이스 UserDAO
- insert, select, update, delete 4개의 메소드를 구현한다.
- insert와 update는 유저정보(dto)를, select와 delete는 유저아이디를 파라미터로 쓴다.
package 빈즈;
public interface UserDAO {
public void insert(UserDTO dto) throws Exception;
public UserDTO select(String userid) throws Exception;
public void update(UserDTO dto) throws Exception;
public void delete(String userid) throws Exception;
}
6. 위의 인터페이스를 받을 JDBC 클래스 UserDAOimple
- insert, select, update, delete 4개의 메소드를 구현한다.
package 빈즈;
public class UserDAOimpl implements UserDAO {
final UserDTO user = new UserDTO(); // 자바빈즈를 user로 받아옴.
public void insert(UserDTO dto) throws Exception {
final StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO USERINFO ");
sql.append("(USERID, USERPW, USERNAME, PHONENO, CHARGE, BLACKLIST) ");
sql.append("VALUES(?, ?, ?, ?, 5000, 'N')");
new ConnectDAO() { // ConnectDAO 클래스의 query() 부분을 여기에서 구현한다.
public void query() throws Exception {
pstmt = conn.prepareStatement(sql.toString());
System.out.println(sql.toString());
pstmt.setString(1, dto.getUserId());
pstmt.setString(2, dto.getUserPw());
pstmt.setString(3, dto.getUserName());
pstmt.setString(4, dto.getPhoneNo());
int cnt = pstmt.executeUpdate();
// System.out.println("insert cnt = " + cnt); // 실행 성공 확인
}
}.excute(); // 윗부분까지가 ConnectDAO 클래스의 excute 메소드로 처리
}
@Override
public UserDTO select(String userid) throws Exception {
final StringBuffer sql = new StringBuffer();
sql.append("SELECT ");
sql.append("USERID, USERPW, USERNAME, PHONENO, CHARGE, BLACKLIST ");
sql.append("FROM USERINFO WHERE USERID = ?");
new ConnectDAO() {
public void query() throws Exception {
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, userid);
rs = pstmt.executeQuery();
while (rs.next()) {
user.setUserId(rs.getString(1));
user.setUserPw(rs.getString(2));
user.setUserName(rs.getString(3));
user.setPhoneNo(rs.getString(4));
user.setChargeBalance(rs.getInt(5));
}
}
}.excute();
return user;
}
@Override
public void update(UserDTO dto) throws Exception {
final StringBuffer sql = new StringBuffer();
sql.append("UPDATE USERINFO SET ");
sql.append("USERPW = ?, USERNAME = ?, PHONENO = ? ");
sql.append("WHERE USERID = ?");
new ConnectDAO() {
public void query() throws Exception {
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, dto.getUserPw());
pstmt.setString(2, dto.getUserName());
pstmt.setString(3, dto.getPhoneNo());
pstmt.setString(4, dto.getUserId());
pstmt.executeUpdate();
}
}.excute();
}
@Override
public void delete(String userid) throws Exception {
final StringBuffer sql = new StringBuffer();
sql.append("DELETE FROM USERINFO ");
sql.append("WHERE USERID = ?");
new ConnectDAO() {
public void query() throws Exception {
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, userid);
pstmt.executeQuery();
}
}.excute();
}
}
7. 위의 DAO 클래스를 실행시킬 UserExcute 클래스
- insert, select, update, delete 4개의 메뉴에 해당하는 값을 입력하고 각 메소드를 불러와서 실행한다.
8. 결과
1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
'자바의 기초문법' 카테고리의 다른 글
싱글톤 패턴 (0) | 2016.05.18 |
---|---|
이클립스에서 HTML 코딩하기 (0) | 2016.02.01 |
JDBC와 빈즈를 이용한 로그인 프로그램 연습 (0) | 2016.01.28 |
DAO와 DTO (0) | 2016.01.27 |
네이버 개발자센터 SVN 이클립스에 연동하기 (0) | 2016.01.25 |