package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
/*
회원을 관리하는 프로그램 작성하기
DB 시스템의 MYMEMBER 테이블을 이용하기
- 처리조건
1.아래 메뉴의 기능을 모두 구현한다. (CRUD 구현하기 create, read, update, delete)
2.'자료 추가'에서는 입력한 회원 ID가 중복되는지 여부를 검사해서 중복되면 다시 입력 받도록 한다.
3. '자료 삭제' 는 회원 ID를 입력 받아 삭제한다.
4. '자료 수정'은 회원 ID를 제외한 전체 자료를 수정한다.
메뉴예시 )
----작업선택-----
1. 자료추가 INSERT
2. 자료 삭제 DELETE
3. 자료 수정 UPDATE
4. 전체 자료 출력 SELECT
5. 작업 끝.
--------------
작업 완료
*/
public class JdbcTest06 {
static Connection conn = null;
static Statement stmt = null;
static PreparedStatement pstmt = null;
static ResultSet rs = null;
public static void main(String[] args) {
System.out.println("메뉴선택");
// 드라이버로딩과 DB연결과 Connection 객체 연결 한번에 함
conn = DBUtil.getConnection();
System.out.println("1.자료 추가하기 2. 자료 삭제 3. 자료수정 4. 전체자료 출력");
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
switch (num) {
case 1:
insert();
break;
case 2:
delete();
break;
case 3:
update();
break;
case 4:
view();
break;
} // switch 의 끝
} // main 끝
private static void insert() {
String mem_id;
try {
System.out.println("mymember 테이블에 데이터를 입력하겠습니다.");
// id 중복검사 while 로 반복
while (true) {
System.out.println("회원님의 id를 입력해 주세요");
Scanner scan = new Scanner(System.in);
mem_id = scan.nextLine();
// id 중복 검사하기
// id 중복 SQL 문장 만들기
String sql = "select count(*) from mymember where mem_id = ? ";
// preparedstatement 객체 생성
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, mem_id);
rs = pstmt.executeQuery();
if (rs.next()) {
if (rs.getInt(1) == 0) {
break;
} else {
System.out.println("같은이름이 존재합니다.");
}
}
} // 반복문 while 끝
// 나머지 데이터들 입력 받기
try {
System.out.println("이름을 입력해주세요 (두번쨰 컬럼 mem_name )");
Scanner scan = new Scanner(System.in);
String mem_name = scan.nextLine();
System.out.println("전화번호를 입력해주세요 (세 번째 컬럼 mem_tel )");
String mem_tel = scan.nextLine();
System.out.println("주소를 입력해주세요 (네번째 컬럼 mem_addr)");
String mem_addr = scan.nextLine();
// sql 문장 만들기
String sql = "insert into mymember ( mem_id, mem_name , mem_tel, mem_addr ) "
+ "values ( ? , ? , ? , ?)";
System.out.println("ddd");
// sql 문장 preparedStatement에 넣기
// 문장연결
pstmt = conn.prepareStatement(sql);
// 각 데이터 넣어줌
pstmt.setString(1, mem_id);
pstmt.setString(2, mem_name);
pstmt.setString(3, mem_tel);
pstmt.setString(4, mem_addr);
// 데이터 성공했는지 알아보기
int cnt = pstmt.executeUpdate();
// cnt 값은 넣어진 쿼리문장의 숫자
if (cnt > 0) {
System.out.println("데이터가 입력이 성공했습니다.");
} else {
System.out.println("데이터 입력이 실패했습니다.");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // catch 괄호
System.out.println("데이터입력 끝 ");
}
private static void delete() {
Scanner scan = new Scanner(System.in);
// id 값을 받는다.
System.out.println("삭제하실 데이터의 id 이름을 입력하세요");
String mem_id = scan.nextLine();
// sql 문장을 만든다
String sql = "delete from mym" + "ember where mem_id = ? ";
try {
// preparedStatement 문장으로 실행한다.
// 객체생성
pstmt = conn.prepareStatement(sql);
// 물음표에 각 데이터 넣어줌
pstmt.setString(1, mem_id);
// 쿼리가 잘 작동했는지 알아보기
int cnt = pstmt.executeUpdate();
if (cnt > 0) {
System.out.println(mem_id + "님의 데이터가 성공적으로 삭제되었습니다.");
} else if (cnt == 0) {
System.out.println(mem_id + "님의 데이터가 삭제되지 않았습니다.");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void update() {
Scanner scan = new Scanner(System.in);
// 수정을 원하는 id 받기
System.out.println("수정하기 원하는 id 를 입력해주세요");
String mem_id = scan.nextLine();
// 수정원하는것들 입력 mem_name , mem_tel , mem_addr
System.out.println("변경을 원하시는 mem_name 을 입력해주세요");
String mem_name = scan.nextLine();
System.out.println("변경을 원하시는 mem_tel 을 입력해주세요");
String mem_tel = scan.nextLine();
System.out.println("변경을 원하시는 mem_addr 을 입력해주세요");
String mem_addr = scan.nextLine();
// 쿼리로 update 하기
String sql = "UPDATE mymember set mem_id = ?, mem_name = ?, mem_tel= ? , mem_addr= ? where mem_id = ? ";
try {
// preparedStatement 객체 생성
pstmt = conn.prepareStatement(sql);
// ? 값 넣어주기
pstmt.setString(1, mem_id);
pstmt.setString(2, mem_name);
pstmt.setString(3, mem_tel);
pstmt.setString(4, mem_addr);
pstmt.setString(5, mem_id);
// 쿼리가 잘 작성되었는지 확인하기
int cnt = pstmt.executeUpdate();
if (cnt > 0) {
System.out.println(mem_id + "의 데이터가 정상적으로 수정되었습니다.");
} else if (cnt == 0) {
System.out.println(mem_id + "의 데이터가 수정이 실패했습니다.");
}
} catch (Exception e) {
// TODO: handle exception
}
}
private static void view() {
// sql 문장 만든다.
String sql = "select * from mymember ";
System.out.println(sql + "을 실행하겠습니다. ");
// statement 객체를 생성해준다.
try {
stmt = conn.createStatement();
// 위에 만든 sql문을 가지고 실행하고 데이터를 저장해준다 (resultSet 에 )
rs = stmt.executeQuery(sql);
// rs 에 있는 데이터를 읽어와준다.
// rs 에 데이터가 존재할 때까지 반복해야 전부 다 읽어올 수 있다.
while (rs.next()) {
System.out.println("mdm_id \t mem_name \t mem_tel \t mem_addr ");
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println();
}
System.out.println("전체 데이터 읽기 끝");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // class 의 끝
---------------------------------------------------------------------------------------------
선생님 코드
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil2;
/*
회원을 관리하는 프로그램 작성하기
(DB시스템의 MYMEMBER테이블 이용)
- 처리조건
1. 아래 메뉴의 기능을 모두 구현한다.(CRUD 구현하기)
2. '자료 추가'에서는 입력한 회원 ID가 중복되는지 여부를 검사해서 중복되면 다시 입력 받도록 한다.
3. '자료 삭제'는 회원 ID를 입력 받아 삭제한다.
4. '자료 수정'은 회원 ID를 제외한 전체 자료를 수정한다.
메뉴예시)
-- 작업 선택 --
1. 자료 추가 ---> insert (C)
2. 자료 삭제 ---> delete (D)
3. 자료 수정 ---> update (U)
4. 전체 자료 출력 ---> select (R)
0. 작업 끝.
-----------------
작업 번호 >>
*/
public class JdbcTest06teacher {
private Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
new JdbcTest06teacher().memberStart();
}
public void memberStart() {
while(true) {
int choice = displayMenu();
switch(choice) {
case 1 : insertMember(); // 추가
break;
case 2 : deleteMember(); // 삭제
break;
case 3 : updateMember(); // 수정
break;
case 4 : displayMember(); // 전체 출력
break;
case 0 :
System.out.println();
System.out.println("프로그램을 종료합니다.");
return;
default :
System.out.println("잘못 선택했습니다. 다시 입력하세요.");
System.out.println();
}
}
}
private int displayMenu() {
System.out.println();
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(" 작업 선택 >> ");
return scan.nextInt();
}
// 회원 정보를 수정하는 메서드
private void updateMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요.");
System.out.print("수정할 회원 ID >> ");
String memId = scan.next();
int count = getMemberCount(memId);
if(count==0) {
System.out.println(memId + "는 없는 회원 ID 입니다.");
System.out.println("수정 작업 종료");
return;
}
System.out.print("새로운 회원 이름 : ");
String memName = scan.next();
System.out.print("새로운 전화번호 : ");
String memTel = scan.next();
scan.nextLine();
System.out.print("새로운 회원 주소 : ");
String memAddr = scan.nextLine();
try {
conn = DBUtil.getConnection();
String sql = "update mymember set mem_name = ? , mem_tel = ?, "
+ "mem_addr = ? where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memName);
pstmt.setString(2, memTel);
pstmt.setString(3, memAddr);
pstmt.setString(4, memId);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println("update 작업 성공~~~");
}else {
System.out.println("수정 작업 실패!!!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt!=null) try { pstmt.close(); }catch(SQLException e) {}
if(conn!=null) try { conn.close(); }catch(SQLException e) {}
}
}
// 회원 정보를 삭제하는 메서드
private void deleteMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요.");
System.out.print("삭제할 회원 ID >> ");
String memId = scan.next();
int count = getMemberCount(memId);
if(count==0) {
System.out.println(memId + "는 없는 회원 ID 입니다.");
System.out.println("삭제 작업 종료");
return;
}
try {
conn = DBUtil.getConnection();
String sql = "delete from mymember where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println("삭제 작업 성공!!!");
}else {
System.out.println("삭제 작업 실패~~~");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt!=null) try { pstmt.close(); }catch(SQLException e) {}
if(conn!=null) try { conn.close(); }catch(SQLException e) {}
}
}
// 회원 정보를 추가하는 메서드
private void insertMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("추가할 회원 정보를 입력하세요.");
int count = 0;
String memId = null;
do {
System.out.print("회원 ID : ");
memId = scan.next();
count = getMemberCount(memId);
if(count>0) {
System.out.println(memId + "은(는) 이미 등록된 ID입니다.");
System.out.println("다른 회원 ID를 입력하세요.");
System.out.println();
}
}while(count>0);
System.out.print("회원 이름 : ");
String memName = scan.next();
System.out.print("전화번호 : ");
String memTel = scan.next();
scan.nextLine(); // 입력 버퍼 비우기
System.out.print("회원 주소 : ");
String memAddr = scan.nextLine();
try {
conn = DBUtil.getConnection();
String sql = "insert into mymember (mem_id, mem_name, mem_tel, mem_addr) "
+ " values (?, ?, ?, ?) ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
pstmt.setString(2, memName);
pstmt.setString(3, memTel);
pstmt.setString(4, memAddr);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println(memId + "회원 정보 추가 성공!!");
}else {
System.out.println("추가 작업 실패~~~~");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt!=null) try { pstmt.close(); }catch(SQLException e) {}
if(conn!=null) try { conn.close(); }catch(SQLException e) {}
}
}
// 매개변수로 회원ID를 받아서 해당 회원ID의 개수를 반환하는 메서드
private int getMemberCount(String memId) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0; // 회원ID의 개수가 저장될 변수
try {
conn = DBUtil.getConnection();
String sql = "select count(*) cnt from mymember where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
} catch (SQLException e) {
count = 0;
e.printStackTrace();
} finally {
if(rs!=null) try { rs.close(); }catch(SQLException e) {}
if(pstmt!=null) try { pstmt.close(); }catch(SQLException e) {}
if(conn!=null) try { conn.close(); }catch(SQLException e) {}
}
return count;
}
// 전체 회원 정보를 출력하는 메서드
private void displayMember() {
System.out.println();
System.out.println("--------------------------------------");
System.out.println(" ID 이름 전화번호 주소");
System.out.println("--------------------------------------");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// conn = DBUtil.getConnection();
conn = DBUtil2.getConnection();
String sql = "select * from mymember";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
String memId = rs.getString("mem_id");
String memName = rs.getString("mem_name");
String memTel = rs.getString("mem_tel");
String memAddr = rs.getString("mem_addr");
System.out.println(memId + "\t" + memName +
"\t" + memTel + "\t" + memAddr);
}
System.out.println("--------------------------------------");
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(rs!=null) try { rs.close(); }catch(SQLException e) {}
if(stmt!=null) try { stmt.close(); }catch(SQLException e) {}
if(conn!=null) try { conn.close(); }catch(SQLException e) {}
}
}
}
댓글
댓글 쓰기