JDBC
PreparedStatement 이용
MVC패턴 - 조사해서 레포트로 제출
public class DBUtil {
// static 초기화 블럭 - 왜 초기화블럭에서 실행할까?
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"JYJ94", "java");
} catch (SQLException e) {
System.out.println("오라클 연결 실패!!!");
return null;
}
}
}
/*
선생님 답
int count = 0;
do{
System.out.print("계좌번호 : ");
bankNo = scan.next();
String sql2 = "select count(*) cnt from bankinfo " + " where bank_no = ?";
pstmt2 = conn.prepareStatement(sql2);
pstmt2.setString(1, bankNo);
rs = pstmt2.executeQuery();
if(rs.next){ // select문의 결과가 1개의 레코드일 경우 if문 사용가능
// count = rs.getInt(1);
count = rs.getInt("cnt"); // 컬럼의 alias로 설정하기
}
if(count>0){
System.out.println(bankNo + " 계좌번호는 이미 있는 번호입니다.");
System.out.println("다시 입력하세요");
System.out.println();
}
}while(count>0);
*/
public class JdbcTest05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;
try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
// conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JYJ94", "java");
conn = DBUtil.getConnection();
String gu;
int count = 0;
do {
System.out.println("lprod_gu값을 입력");
gu = scan.next();
String sql2 = "select count(*) cnt from lprod where lprod_gu = ?";
pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, gu);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
if(count>0){
System.out.println(gu + "는 이미 있는 번호입니다.");
System.out.println("다시 입력하세요");
System.out.println();
}
}while(count > 0);
System.out.println("lprod_nm값을 입력");
String nm = scan.next();
String sql = "insert into lprod values( NVL((Select MAX(lprod_id) from lprod),0) + 1,?,?)";
pstmt2 = conn.prepareStatement(sql);
pstmt2.setString(1, gu);
pstmt2.setString(2, nm);
int result = pstmt2.executeUpdate();
if(result > 0) {
System.out.println("정상적으로 등록되었습니다.");
}
} catch (SQLException e) {
// TODO: handle exception
// } catch (ClassNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}finally {
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) { }
}
/*
선생님 답
입력받은 lprod_gu가 이미 등록되어 있으면 다시 입력 받아서 처리한다.
String gu = null; // 상품 분류 코드가 저장될 변수 선언
int count = 0; // 입력한 '상품 분류 코드'의 개수가 저장될 변수 선언
do{
System.out.println("상품 분류 코드(LPROD_GU) 입력:");
gu = scan.next();
String sql2 = "select count(*) from lprod where lprod_gu = ?";
pstmt = conn.preparedStatement(sql2);
pstmt = setString(1, gu);
rs = pstmt.executeQuery();
if(rs.next()){
count = rs.getInt("cnt");
}
if(count > 0){
System.out.println("입력한 상품 분류 코드 " + gu + "는(은) 이미 등록된 코드입니다.");
System.out.println("다시 입력하세요");
}
}while(count > 0);
System.out.println("상품 분류명 (LPROD_NM) 입력 : ");
String nm = " scan.next();
String sql3 = "insert into lprod(lprod_id, lprod_gu, lprod_nm)
values(?,?,?)";
pstmt2 = conn.prepareStatement(sql2);
pstmt2.setInt(1, maxNum);
pstmt2.setInt(2, gu);
pstmt2.setInt(3, nm);
int cnt = pstmt2.executeUpdate();
if(cnt>0){
System.out.println("등록 성공~~~");
}else{
System.out.println("등록 실패!!!");
}
*/
}
}
public class JdbcTest06 {
Scanner scan = new Scanner(System.in);
Connection conn = DBUtil.getConnection();;
PreparedStatement pstmt;
ResultSet rs;
public static void main(String[] args) {
new JdbcTest06().start();
}
private void start() {
while(true) {
System.out.println("== 작업 선택 ==");
System.out.println("1. 자료 추가");
System.out.println("2. 자료 삭제");
System.out.println("3. 자료 수정");
System.out.println("4. 전체 자료 출력");
System.out.println("0. 작업 끝");
System.out.println("=============");
System.out.print("선택 >");
int input = scan.nextInt();
switch(input) {
case 1: insert(); break;
case 2: delete(); break;
case 3: update(); break;
case 4: read(); break;
case 0:
System.out.println("작업을 종료합니다.");
System.exit(0);
}
}
}
//등록
private void insert() {
// MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
System.out.println("회원정보를 등록합니다.");
int count = 0;
String userId;
do {
System.out.println("아이디 입력");
userId = scan.next();
String sql = "select count(*) cnt from mymember where mem_id = ?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
rs = pstmt.executeQuery();
//자료 검증
if(rs.next()) {
count = rs.getInt("cnt");
}
if(count > 0) {
System.out.println("중복되는 아이디입니다.");
System.out.println("다시 입력해주세요.");
}
} catch (SQLException e) {
System.out.println("아이디 검색 실패!!");
e.printStackTrace();
}finally {
if(rs!=null)try{rs.close();}catch(SQLException e) {}
if(pstmt!=null)try{pstmt.close();}catch(SQLException e) {}
}
}while(count > 0);
System.out.println("이름 입력");
String userName = scan.next();
System.out.println("비밀번호 입력");
String Password = scan.next();
System.out.println("전화번호 입력");
String userTel = scan.next();
scan.nextLine();
System.out.println("주소 입력");
String userAddr = scan.nextLine();
try {
String sql = "insert into mymember values(?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
pstmt.setString(2, userName);
pstmt.setString(3, Password);
pstmt.setString(4, userTel);
pstmt.setString(5, userAddr);
int result = pstmt.executeUpdate();
if(result > 0) {
System.out.println("회원 등록에 성공했습니다!");
}else {
System.out.println("회원 등록에 실패했습니다.");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pstmt!=null)try{pstmt.close();}catch(SQLException e) {}
}
}
//삭제
private void delete() {
// MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
//삭제할 아이디 검색
System.out.println("삭제할 아이디를 입력해주세요");
String userId = scan.next();
//정말 삭제할건지 물어보기
System.out.println("정말 삭제하시겠습니까?");
System.out.println("1.예 2.아니오");
int input = scan.nextInt();
switch(input) {
case 1: break;
case 2: return;
default: return;
}
//삭제할 sql
String sql = "delete mymember where mem_id = ?";
try {
//sql문 실행
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userId);
int result = pstmt.executeUpdate();
//삭제(delete)
if(result > 0) {
System.out.println("정상적으로 삭제되었습니다.");
}else {
System.out.println("삭제에 실패했습니다.");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pstmt!=null) try{pstmt.close();}catch(Exception e) {}
}
}
//수정
private void update() {
// MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
//수정할 아이디 검색
System.out.println("수정할 아이디를 입력해주세요");
String userId = scan.next();
//정말 수정할건지 물어보기
System.out.println("정말 수정하시겠습니까?");
System.out.println("1.예 2.아니오");
int input = scan.nextInt();
switch(input) {
case 1: break;
case 2: return;
default: return;
}
//수정할 정보 입력받기
System.out.println("수정할 이름 입력");
String userName = scan.next();
System.out.println("수정할 비밀번호 입력");
String Password = scan.next();
System.out.println("수정할 전화번호 입력");
String userTel = scan.next();
scan.nextLine();
System.out.println("수정할 주소 입력");
String userAddr = scan.nextLine();
//수정할 부분 모두
String sql = "update mymember set MEM_NAME =?, MEM_PASS =?, MEM_TEL=?, MEM_ADDR=? where MEM_ID=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userName);
pstmt.setString(2, Password);
pstmt.setString(3, userTel);
pstmt.setString(4, userAddr);
pstmt.setString(5, userId);
int result = pstmt.executeUpdate();
if(result > 0) {
System.out.println("정상적으로 수정되었습니다.");
}else {
System.out.println("수정에 실패했습니다.");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pstmt!=null) try{pstmt.close();}catch(Exception e) {}
}
//수정 완료
}
//읽어오기
private void read() {
// MEM_ID / MEM_NAME / MEM_PASS / MEM_TEL / MEM_ADDR
//select문
String sql = "select * from mymember";
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
System.out.println(" == 회원정보 ==");
while(rs.next()) {
System.out.println("아이디 : " + rs.getString(1));
System.out.println("이름 : " + rs.getString(2));
System.out.println("비밀번호 : " + rs.getString(3));
System.out.println("전화번호 : " + rs.getString(4));
System.out.println("주소 : " + rs.getString(5));
System.out.println("=============================");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(rs!=null) try{rs.close();}catch(Exception e) {}
if(pstmt!=null) try{pstmt.close();}catch(Exception e) {}
}
}
}