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개의 메뉴에 해당하는 값을 입력하고 각 메소드를 불러와서 실행한다.

package 빈즈;

import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class UserExcute {

public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
UserDAOimpl query = new UserDAOimpl();
System.out.println("1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT");
int cmdNo = Integer.parseInt(br.readLine());

while (true) {

if (cmdNo == 1) { // insert
System.out.println("정보입력");
System.out.print("ID: ");
String userId = br.readLine();
System.out.print("PW: ");
String userPw = br.readLine();
System.out.print("NAME: ");
String userName = br.readLine();
System.out.print("PHONENO: ");
String PhoneNo = br.readLine();
UserDTO dto = new UserDTO();
dto.setUserId(userId);
dto.setUserPw(userPw);
dto.setUserName(userName);
dto.setPhoneNo(PhoneNo);
query.insert(dto);
System.out.println("입력완료");
break;
}

else if (cmdNo == 2) { // select
System.out.print("조회할 ID: ");
String userId = br.readLine();
UserDTO dto = new UserDTO();
//dto.setUserId(userId);
dto = query.select(userId);
System.out.println("ID     PW      NAME      PHONENO    CHARGE");
System.out.println("--------------------------------------------");
System.out.printf("%s %s %5s \t%s %d",
dto.getUserId(), dto.getUserPw(), dto.getUserName(), dto.getPhoneNo(), dto.getChargeBalance());
break;
}

else if (cmdNo == 3) { // update
System.out.print("정보를 변경할 ID: ");
String userId = br.readLine();
System.out.print("PW: ");
String userPw = br.readLine();
System.out.print("NAME: ");
String userName = br.readLine();
System.out.print("PHONENO: ");
String PhoneNo = br.readLine();
UserDTO dto = new UserDTO();
dto.setUserId(userId);
dto.setUserPw(userPw);
dto.setUserName(userName);
dto.setPhoneNo(PhoneNo);
query.update(dto);
System.out.println("변경완료");
break;
}

else if (cmdNo == 4) { // delete
System.out.print("정보를 삭제할 ID: ");
String userId = br.readLine();
UserDTO dto = new UserDTO();
query.delete(userId);
System.out.println("삭제완료");
break;
}
else {
break;
}
}
}
}



8. 결과


1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT


1
정보입력
ID: user04
PW: 4444
NAME: 사사미
PHONENO: 02-444-4444
입력완료

1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
2
조회할 ID: user04
ID     PW      NAME      PHONENO    CHARGE
--------------------------------------------
user04 4444   사사미 02-444-4444 5000

1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
3
정보를 변경할 ID: user04
PW: 4444
NAME: 사사미짱
PHONENO: 02-456-7890
변경완료

1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
2
조회할 ID: user04
ID     PW      NAME      PHONENO    CHARGE
--------------------------------------------
user04 4444  사사미짱 02-456-7890 5000

1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
4
정보를 삭제할 ID: user04
삭제완료

1.INSERT 2.SELECT 3.UPDATE 4.DELETE 5.QUIT
5




Posted by netyhobby
,