✿∘˚˳°∘°

25일차 : JDBC - Statement 본문

국비수업/JDBC

25일차 : JDBC - Statement

_HYE_ 2022. 12. 30. 18:15

20221230

 

이클립스와 오라클의 인코딩방식이 다르면 데이터교환 시 글자가 깨질 수 있다

UTF-8로 맞춰줌 

Preferences > General > Workspace > Encoding확인

Preferences > General > Editors > Speling > Encoding확인

 

SELECT 는 조회결과를 값으로 받기 때문에 이를 받아줄 객체가 필요함(ResultSet)

INSERT / UPDATE / DELETE 는 행 삽입/수정/삭제 시 작업에 성공한 n개의 행이 리턴되므로 int형으로 받으면 된다.

프로젝트 생성 시 항상 수행해줘야할 작업 - ojdbc연결하기

 

JDBC 실습에 사용할 계정 / 테이블 생성(+INSERT)

-- 20221230 : JAVA프로그램과 연동할 계정만들기
CREATE USER jdbc IDENTIFIED BY 1234;
GRANT CONNECT, RESOURCE TO jdbc;
-- 테이블생성
CREATE TABLE MEMBER_TBL(
    MEMBER_ID       VARCHAR2(20)    PRIMARY KEY, -- 아이디
    MEMBER_PW       VARCHAR2(30)    NOT NULL,    -- 비밀번호
    MEMBER_NAME     VARCHAR2(30)    NOT NULL,    -- 이름
    MEMBER_ADDR     VARCHAR2(100)   NOT NULL,    -- 주소
    MEMBER_PHONE    CHAR(13)        NOT NULL,    -- 전화번호
    MEMBER_AGE      NUMBER          NOT NULL,    -- 나이
    MEMBER_GENDER   CHAR(3) CHECK(MEMBER_GENDER IN('남', '여')), 
    ENROLL_DATE     DATE                         -- 가입일
);

INSERT INTO MEMBER_TBL VALUES
('user01', '1111', '유저01', '서울시 영등포구', '010-1111-1111', 20, '남', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user02', '2222', '유저02', '서울시 강남구', '010-2222-2222', 21, '여', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user03', '3333', '유저03', '서울시 금천구', '010-3333-3333', 22, '여', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user04', '4444', '유저04', '인천시 서구', '010-4444-4444', 23, '남', SYSDATE);
INSERT INTO MEMBER_TBL VALUES
('user05', '5555', '유저05', '인천시 부평구', '010-5555-5555', 24, '여', SYSDATE);

SELECT * FROM MEMBER_TBL;
COMMIT; -- COMMIT을 하지않으면 JAVA에서 조회할 수 없음

 

[ JAVA 클래스 ] - [ memberStart.java / member.java / memberConroller.java / memberDao.java ]

- memberStart : 실행 클래스

- member : 기능제공클래스1 member의 정보를 저장하고 세팅할 클래스

- memberController : 기능제공클래스2, 수행할 작업을 작성

- memberDao : 기능제공클래스3,  DB관련코드를 따로관리할 클래스,

                                                       데이터베이스에 접속하고 쿼리문을 수행하고 결과를 되돌려주는 클래스

DAO : Data Access Object : DB관련코드는 DAO에서 따로관리(코드가 길기 때문에)

 

Member.java

package kr.or.member.vo;

import java.sql.Date;

public class Member {
	private String memberId;
	private String memberPw;
	private String memberName;
	private String memberAddr;
	private String memberPhone;
	private int memberAge;
	private char memberGender;
	private Date enrollDate; //java.sql의 Date사용
	
	public Member() {
		super();
	}
	public Member(String memberId, String memberPw, String memberName, String memberAddr, String memberPhone,
			int memberAge, char memberGender, Date enrollDate) {
		super();
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberName = memberName;
		this.memberAddr = memberAddr;
		this.memberPhone = memberPhone;
		this.memberAge = memberAge;
		this.memberGender = memberGender;
		this.enrollDate = enrollDate;
	}
	
	public String getMemberId() {
		return memberId;
	}
	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	public String getMemberPw() {
		return memberPw;
	}
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	public String getMemberAddr() {
		return memberAddr;
	}
	public void setMemberAddr(String memberAddr) {
		this.memberAddr = memberAddr;
	}
	public String getMemberPhone() {
		return memberPhone;
	}
	public void setMemberPhone(String memberPhone) {
		this.memberPhone = memberPhone;
	}
	public int getMemberAge() {
		return memberAge;
	}
	public void setMemberAge(int memberAge) {
		this.memberAge = memberAge;
	}
	public char getMemberGender() {
		return memberGender;
	}
	public void setMemberGender(char memberGender) {
		this.memberGender = memberGender;
	}
	public Date getEnrollDate() {
		return enrollDate;
	}
	public void setEnrollDate(Date enrollDate) {
		this.enrollDate = enrollDate;
	}
}

 

memberConroller 의 전역변수 / 생성자 선언

	// private ArrayList<Member> members; 정보저장을 DB에 할거기때문에 필요없음
	private Scanner sc;
	// 데이터베이스 관련코드를 처리하는 객체를 전역변수로 선언(여러메소드에서 사용하므로)
	private MemberDao dao; 
	
	public MemberController() {
		super();
		sc = new Scanner(System.in);
		dao = new MemberDao();
	}

0. 메인코드

memberConrtoller.java -  main()

	public void main() {
		while(true) {
			System.out.println("\n ---------- 회원 관리 프로그램 v1 ----------\n");
			System.out.println("1. 전체 회원 조회");		// SELECT
			System.out.println("2. 아이디로 회원 조회"); 		// SELECT
			System.out.println("3. 이름으로 회원 조회"); 		// SELECT
			System.out.println("4. 회원 가입");			// INSERT
			System.out.println("5. 회원 정보 변경");		// UPDATE
			System.out.println("6. 회원 탈퇴");			// DELETE
			System.out.println("0. 프로그램 종료");
			System.out.print("선택 > ");
			int sel = sc.nextInt();
			
			switch(sel) {
			case 1:
				selectAllMember();
				break;
			case 2:
				selectMemberId();
				break;
			case 3:
				selectMemberName();
				break;
			case 4:
				insertMember();
				break;
			case 5:
				//비밀번호, 주소, 전화번호 변경
				updateMember();
				break;
			case 6:
				//아이디로 삭제
				deleteMember();
				break;
			case 0:
				System.out.println("프로그램을 종료합니다.");
				return;
			default:
				System.out.println("잘못입력하셨습니다");
			}
		}
	}

 

1. 전체회원조회

memberController.java

	public void selectAllMember() {
		// 1.여기서 DB작업이 필요한지 생각하기
		// 2.필요하면 사용할 쿼리문 작성 : SELECT * FROM MEMBER_TBL;
		// 3.쿼리문을 완성하기위해서 사용자한테 입력받아야할 값이 있는지
		// 4.사용자한테 입력받을 값이 없음 -> 바로 쿼리문을 실행하고 결과받아오기(있으면 입력먼저받기)
		ArrayList<Member> list = dao.selectAllMember();
		// 회원정보 1명을 받을거면 Member타입으로 받음
		// 회원정보 여러개를 받을거면 Member[]로 받아야하는데, 배열을 사용하면 반드시 길이를 지정해줘야함(몇명인지모르는데)
		// 길이제한이 없는 배열인 ArrayList<Member>를 사용해준다.
		System.out.println(list.size());
		System.out.println("\n ---------- 전체 회원 출력 ----------\n");
		System.out.println("아이디\t비밀번호\t이름\t주소\t\t전화번호\t\t나이\t성별\t가입일");
		System.out.println("------------------------------------------------------------------------------");
		for(int i=0; i<list.size(); i++) {
			Member m = list.get(i);
			System.out.print(m.getMemberId()+"\t");
			System.out.print(m.getMemberPw()+"\t");
			System.out.print(m.getMemberName()+"\t");
			System.out.print(m.getMemberAddr()+"\t");
			System.out.print(m.getMemberPhone()+"\t");
			System.out.print(m.getMemberAge()+"\t");
			System.out.print(m.getMemberGender()+"\t");
			System.out.println(m.getEnrollDate());	
		}
	}

 

memberDao.java 

// 데이터베이스에 접속해서 전체회원을 조회하여 리턴하는 메소드
	public ArrayList<Member> selectAllMember(){
		//JDBC 작성절차
		//0. 자원반환을 해야하는 객체를 미리 선언
		Connection conn = null; //2번절차에서 사용할 객체
		Statement stmt = null;  //3번절차에서 사용할 객체
		ResultSet rset = null;  //4번절차에서 사용할 객체(SELECT 인 경우)
		
		//결과를 반환할 객체
		ArrayList<Member> list = new ArrayList<Member>();				
		//사용할 쿼리문을 작성
		//문자열에 작성(단, ""안에 ;은 반드시제거 - 있으면 에러발생 / 대소문자상관X)
		String query = "select * from member_tbl";	
		
		try {
			//1. 드라이버등록(연결 시 사용할 클래스 등록(ojdbc6제공), 외부라이브러리추가를 하지않으면 사용불가)
			Class.forName("oracle.jdbc.driver.OracleDriver");//"패.키.지.클래스"
			
			//2. 커넥션 생성(java와 db가 연결할 통로만들기, 1번에서 등록한 드라이버를 이용해서 연결생성 - dbms연결)
			//접속에 문제가 없으면 Connection객체리턴
			//접속정보에 문제가 있으면 null 리턴
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//127.0.0.1 내컴퓨터ip를 조회해줌
			
			//3. 쿼리문을 실행하고, 결과를 가져올 객체 생성(Statement) 
			//2번에서 만들어진 conn을 이용해서 생성
			stmt = conn.createStatement();
			
			//4.5.는 동시에 일어남
			//4. 쿼리문 실행 : select문을 실행하는 메소드, 매개변수로 쿼리문 전달
			//				결과로 select 수행결과인 ResultSet을 반환
			//5. 쿼리문 실행 결과를 저장
			rset = stmt.executeQuery(query);
			//DB랑 통신을 통해 해야할 일은 여기서 종료
			
			//5-1. 수행결과를 자바에서 사용하기위한 형태로 편집
			//ResultSet에 있는 정보를 -> ArrayList<Member> 변환
			//rset.next(); : 커서를 한줄 내리고 데이터가 있으면 true 없으면 false반환
			while(rset.next()) {
				String memberId = rset.getString("member_id");
				String memberPw = rset.getString("member_pw");
				String memberName = rset.getString("member_name");
				String memberAddr = rset.getString("member_addr");
				String memberPhone = rset.getString("member_phone");
				int memberAge = rset.getInt("member_age");
				char memberGender = rset.getString("member_gender").charAt(0);
				Date enrollDate = rset.getDate("enroll_date");
				Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, enrollDate);				
				list.add(m);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rset.close();
				stmt.close();
				conn.close();				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;
	}

 

2. 아이디로 회원조회 : Id를 입력받아 해당 회원 정보 조회(1명)

memberController.java

	public void selectMemberId() {
		//1. DB작업이 필요한가? O 회원정보는 DB에있으므로 필요
		//2. 작성해야할 쿼리문? SELECT * FROM MEMBER_TBL WHERE MEMBER_ID=입력값;
		//3. 쿼리문 작성을 위해 입력받아야 할 값이 있나? O Id를 입력받아야한다.
		System.out.println("\n ---------- id로 회원 조회 ----------\n");
		System.out.print("조회할 아이디를 입력하세요 : ");
		String memberId = sc.next();
		
		//이번에는 한명(조회불가 시0명)의 정보를 조회해서 받기때문에 Member타입으로 받는다.
		//query문에서 조건절이 primary key이기 때문에 조회결과는 무조건 회원 0 또는 1명
		//primary key가 아니면 확신할수는 없다.(unique가 아닌 이상 중복인경우 1명이상이 나올 수 있음)
		Member m = dao.selectMemberId(memberId);
		if(m == null) {
			System.out.println("회원정보를 찾을 수 없습니다.");
		}else {
			System.out.println("아이디 : "+m.getMemberId());
			System.out.println("비밀번호 : "+m.getMemberPw());
			System.out.println("이름 : "+m.getMemberName());
			System.out.println("주소 : "+m.getMemberAddr());
			System.out.println("전화번호 : "+m.getMemberPhone());
			System.out.println("나이 : "+m.getMemberAge());
			System.out.println("성별 : "+m.getMemberGender());
			System.out.println("가입일 : "+m.getEnrollDate());
		}	
	}

MemberDao.java

	public Member selectMemberId(String memberId) {
		//0.반환할 객체 선언		
		Connection conn = null; //무조건
		Statement stmt = null;  // 무조건
		//ResultSet이 필요한지 아닌지 - 지금 사용할 query문이 SELECT이면 필요, 다른 DML일 경우 필요없음
		ResultSet rset = null;
		//결과처리할변수
		Member m = null;
					  //select * from member_tbl where memberId = '아이디' 이므로 외따옴표까지 작성
		String query = "select * from member_tbl where member_Id = '"+memberId+"'";
		
		try {
			//1.드라이버등록
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//2.Connect 객체 생성(dbms와연결)
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//3.Statement객체 생성
			stmt = conn.createStatement();
			//4. 쿼리문실행 5.결과를 ResultSet로 받기(저장)
			rset = stmt.executeQuery(query);
			//5-1 수행결과를 자바에서 사용하기위한 형태로 변환
			if(rset.next()) {
				m = new Member(); 
				//지금 객체를 만드는 이유 m == null : 조회실패 / m == 객체주소 : 조회성공 
				String memberId2 = rset.getString("member_id");
				m.setMemberId(memberId2);
				String MemberPw = rset.getString("member_pw");
				m.setMemberPw(MemberPw);
				String memberName = rset.getString("member_name");
				m.setMemberName(memberName);
				m.setMemberAddr(rset.getString("member_Addr"));
				m.setMemberPhone(rset.getString("member_phone"));
				m.setMemberAge(rset.getInt("member_age"));
				m.setMemberGender(rset.getString("member_gender").charAt(0));
				m.setEnrollDate(rset.getDate("enroll_date"));
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				//6. 자원반환
				conn.close();
				stmt.close();
				rset.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
		return m;
	}

 

3. 이름으로 회원 조회 : 이름을 입력받아 입력값이 이름에 포함된 회원 모두 조회(부분검색가능, n명출력)

memberController.java

	public void selectMemberId() {
		//1. DB작업이 필요한가? O 회원정보는 DB에있으므로 필요
		//2. 작성해야할 쿼리문? SELECT * FROM MEMBER_TBL WHERE MEMBER_ID=입력값;
		//3. 쿼리문 작성을 위해 입력받아야 할 값이 있나? O Id를 입력받아야한다.
		System.out.println("\n ---------- id로 회원 조회 ----------\n");
		System.out.print("조회할 아이디를 입력하세요 : ");
		String memberId = sc.next();
		
		//이번에는 한명(조회불가 시0명)의 정보를 조회해서 받기때문에 Member타입으로 받는다.
		//query문에서 조건절이 primary key이기 때문에 조회결과는 무조건 회원 0 또는 1명
		//primary key가 아니면 확신할수는 없다.(unique가 아닌 이상 중복인경우 1명이상이 나올 수 있음)
		Member m = dao.selectMemberId(memberId);
		if(m == null) {
			System.out.println("회원정보를 찾을 수 없습니다.");
		}else {
			System.out.println("아이디 : "+m.getMemberId());
			System.out.println("비밀번호 : "+m.getMemberPw());
			System.out.println("이름 : "+m.getMemberName());
			System.out.println("주소 : "+m.getMemberAddr());
			System.out.println("전화번호 : "+m.getMemberPhone());
			System.out.println("나이 : "+m.getMemberAge());
			System.out.println("성별 : "+m.getMemberGender());
			System.out.println("가입일 : "+m.getEnrollDate());
		}	
	}

MemberDao.java

	public ArrayList<Member> selectMemberName(String searchName){
		// 0. 반환할 객체 생성
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null; //select를 사용하기때문에 필요
		//결과처리변수선언
		ArrayList<Member> list = new ArrayList<Member>();
		//쿼리문작성
		String query = "select * from member_tbl where member_name like '%"+searchName+"%'";	
		
		try {
			//1.driver등록
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//2.connection객체생성(dbms연결)
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//3. statement객체생성
			stmt = conn.createStatement();
			//4. 쿼리문실행 / 5. 결과값을 넣기
			rset = stmt.executeQuery(query);			
			while(rset.next()) {
				//getString(정수) - 의 경우 순서가 중요하다(컬럼의 순서로 가져옴)
				String memberId = rset.getString(1);
				String memberPw = rset.getString(2);
				String memberName = rset.getString(3);
				String memberAddr = rset.getString(4);
				String memberPhone = rset.getString(5);
				int memberAge = rset.getInt(6);
				char memberGender = rset.getString(7).charAt(0);
				Date enrollDate = rset.getDate(8);	
				
				Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, enrollDate);
				list.add(m);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				stmt.close();
				rset.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
		return list;
	}

 

4. 회원가입(중복아이디를 입력하지 않는다는 가정)

MemberConroller.java

	public void insertMember() {
		System.out.println("\n ---------- 회원 가입 ----------\n");
		//1. DB작업이 필요한가? ㅇ INSERT
		//2. 작성해야할 쿼리문은? INSERT INTO MEMBER_TBL VALUES('아이디','비밀번호',...,sysdate);
		//3. 입력받아야할 값이 있나? ㅇ 가입일빼고 전부
		System.out.print("아이디 입력 : ");
		String memberId = sc.next();
		System.out.print("비밀번호 입력 : ");
		String memberPw = sc.next();
		System.out.print("이름 입력 : ");
		String memberName = sc.next();
		System.out.print("주소 입력 : ");
		sc.nextLine();
		String memberAddr = sc.nextLine();
		System.out.print("전화번호 입력 : ");
		String memberPhone = sc.next();
		System.out.print("나이 입력 : ");
		int memberAge = sc.nextInt();
		System.out.print("성별 입력[남/여] : ");
		char memberGender = sc.next().charAt(0);
		
		Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender);
		// Member로 묶는 방법 세가지
		// 1. 모든 매개변수가 있는 생성자를 사용하고 enrolldate에 null을 대입하기
		//Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender, null);
		// 2. 매개변수가 7개인 생성자를 또 생성해서 사용하기(생성자는 필요에 따라 더 만들어도 되므로)
		//Member m = new Member(memberId, memberPw, memberName, memberAddr, memberPhone, memberAge, memberGender);
		// 3. 기본생성자로 객체 생성 후 setter사용
		
		int result = dao.insertMember(m); 
		//insert/update/delete는 수행결과를 정수(수행하여 반영된 행의 수)로 리턴
		
		if(result > 0) {
			System.out.println("회원가입 성공!");
		}else {
			System.out.println("회원가입 실패!");
		}
	}

MemberDao.java

	public int insertMember(Member m) {
		//0.반환할 객체 생성
		Connection conn = null;
		Statement stmt = null;
		//ResultSet rset = null; - 수행할 쿼리가 SELECT가 아니므로 ResultSet은 없어도된다.
		
		//결과처리할 변수
		int result = 0;
		//쿼리문작성
		String query = "INSERT INTO MEMBER_TBL VALUES("
				    +"'"+m.getMemberId()+"',"
				    +"'"+m.getMemberPw()+"',"
				    +"'"+m.getMemberName()+"',"
				    +"'"+m.getMemberAddr()+"',"
				    +"'"+m.getMemberPhone()+"',"
				    +m.getMemberAge()+","
				    +"'"+m.getMemberGender()+"',"
				    +"sysdate)";
		System.out.println(query);
		
		try {
			//1. 드라이버선언
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//2. Connection생성
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//3. Statement생성
			stmt = conn.createStatement();
			//4,5. 쿼리문 수행 후 결과저장(SELECT일때랑 다름)
			//stmt.executeQuery(query) 사용불가 - 리턴타입이 result set
			//insert/update/delete는 stmt.executUpdate()로 실행
			//결과는 쿼리수행으로 변경된 테이블의 행의 갯수로 받는다(정수)
			result = stmt.executeUpdate(query);
			
			if(result > 0) {
				//insert가 정상적으로 수행되면 commit
				conn.commit();
			}else {
				//insert가 비정상이면(실패하면) rollback
				conn.rollback();
			}		
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}		
		return result;
	}

 

 

5. 회원정보변경 : 비밀번호, 주소, 전화번호 변경

MemberConroller.java

	public void updateMember() {
		// UPDATE MEMBER_TBL SET MEMBER_PW = '수정값',MEMBER_ADDR = '수정값', MEMBER_PHONE = '수정값' 
		// WHERE MEMBER_ID = '아이디';
		System.out.println("\n ---------- 회원 정보 수정 ----------\n");
		System.out.print("정보를 수정 할 회원의 id를 입력하세요 : ");
		String memberId = sc.next();
		Member check = dao.selectMemberId(memberId);
		if(check == null) {
			System.out.println("일치하는 회원 정보가 없습니다.");
		}else {
			System.out.print("변경할 비밀번호 입력 : ");
			String updatePw = sc.next();
			System.out.print("변경할 주소 입력 : ");
			sc.nextLine();
			String updateAddr = sc.nextLine();
			System.out.print("변경할 전화번호 입력 : ");
			String updatePhone = sc.next();
			
			Member m = new Member(memberId, updatePw, updateAddr, updatePhone);
			int result = dao.updateMember(m);
			if(result > 0) {
				System.out.println("수정 성공!");
			}else {
				System.out.println("수정 실패!");
			}
		}

	}

MemberDao.java

	public int updateMember(Member m) {
		// 0.객체생성
		Connection conn = null;
		Statement stmt = null;
		//반환값변수
		int result = 0;
		//쿼리문
		// UPDATE MEMBER_TBL SET MEMBER_PW = '수정값',MEMBER_ADDR = '수정값', MEMBER_PHONE = '수정값' 
		// WHERE MEMBER_ID = '아이디';
		String query = "update member_tbl set member_pw = '"+m.getMemberPw()
		                                 +"',member_addr = '"+m.getMemberAddr()
		                                 +"',member_phone = '"+m.getMemberPhone()
		                                 +"' where member_id = '"+m.getMemberId()+"'";
	
		//1.드라이버
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			stmt = conn.createStatement();
			
			result = stmt.executeUpdate(query);
			if(result > 0) {
				conn.commit();
			}else {
				conn.rollback();
			}
					
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}	
		return result;
	}

 

6.회원탈퇴 : 아이디를 입력받아 해당회원정보 삭제

MemberConroller.java

	public void deleteMember() {
		System.out.println("\n ---------- 회원 정보 삭제 ----------\n");
		System.out.print("탈퇴할 회원의 id를 입력하세요 : ");
		String memberId = sc.next();
		Member check = dao.selectMemberId(memberId);
		if(check == null) {
			System.out.println("일치하는 회원 정보가 없습니다.");
		}else {
			int result = dao.deleteMember(memberId);
			if(result > 0) {
				System.out.println("삭제성공!");
			}else {
				System.out.println("삭제실패!");
			}
		}
	}

MemberDao.java

	public int deleteMember(String memberId) {
		
		Connection conn = null;
		Statement stmt = null;
		
		int result = 0;
		
		//쿼리문 : DELETE FROM MEMBER_TBL WHERE MEMBER_ID = '아이디'
		String query = "delete from member_tbl where member_id = '"+memberId+"'";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "jdbc", "1234");
			stmt = conn.createStatement();
			result = stmt.executeUpdate(query);
			if(result > 0) {
				conn.commit();
			}else {
				conn.rollback();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		return result;
	}

 

[ 후기 ] 

오늘 수업은 DB랑 연결이되니까 실행할때마다 입력하지않아도 되는 점이 너무너무 편했다.

코드 한두줄로 디비랑 연결되어 데이터 주고받는것도 너무신기하고 오늘수업은 너무너무 재미있었다. 

재밌긴한데 쿼리문 작성이 힘들다...외따옴표 찾기가 쉽지않다 찾으면서 눈빠지는줄..!

 

 

오늘 실수한 점 

1. 3번 : 이름을 입력받아 회원정보를 조회하는 메소드에서 일치하는 회원이 없을 경우 memberConroller에서 ArrayList의 size를 이용하여  if문을 짜줘야하는데 Dao에서 if를 걸어줌 

잘못짠 부분

if(rset.next) { while(rset.next) }-- 다음행으로 가는 행동을 하는 rset.next()가 두개이기 때문에 때문에 행이 하나이거나 첫째 행은 출력이 안된다. 때문에, if(rset == null) 도 넣어보았는데 아애동작하지 않는 상황이발생. 메인에서 리스트의 사이즈를 재주거나 isEmply명령어를 이용했어야 했다.

 

2. 쿼리문 오타실수

 

Comments