2022-02-10 JDBC2

GGAE99·2022년 2월 10일
0

진도

목록 보기
21/43

오늘은 어제 만들던 프로그램을 마저 만들어본다.
근데 어제 설명을 너무 부족하게 한 것 같아서 나도 이해할 겸 더 자세하게 다뤄봐야겠다.
어제 만들려고 했던 프로그램을 이어서 맏드는 것 뿐만 아니라 그냥 처음부터 다시 정리해보자.

근데 모든 코드를 다 설명하는건 아니고 그냥 중요한 코드들만 설명할 것 이다.
그래도 각 부분의 처음에 전체 코드를 올린다.
만들려는 프로그램은 회원 관리 프로그램으로
전체 회원 조회 / 아이디로 회원 조회 / 이름으로 회원 조회 / 회원 정보 등록 / 회원 정보 수정 / 회원 정보 삭제 / 프로그램 종료 의 기능을 가지고 있다. 하나하나 살펴보자.
혹시 이해가 안된다면 저번 포스팅도 보면 좋을 것 같다. 이 프로그램의 클래스나 패키지에 대해서도 써놓기는 했다. 이 글에서는 생략한다.

메뉴

가장 먼저 이 프로그램 메뉴부터 만들어보자.

public void main() {
			while(true) {
				System.out.println("----- 회원 관리 프로그램v2 -----");
				System.out.println("1. 전체 회원 조회");
				System.out.println("2. 아이디로 회원 조회");
				System.out.println("3. 이름으로 회원 조회");
				System.out.println("4. 회원 정보 등록");
				System.out.println("5. 회원 정보 수정");
				System.out.println("6. 회원 정보 삭제");
				System.out.println("0. 프로그램 종료");
				System.out.print("선택 > ");
				int sel = sc.nextInt();
				switch(sel) {
				case 1:
					selectAllMember();
					break;
				case 2:
					selectOneMember();
					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("잘못입력하셨습니다.");
					break;
				}
		}
	}//main end

메뉴 코드는 이렇다. 각 기능의 맞춰 코드를 짜줄 것 이다. 충분쓰다.

회원 전체 조회

2가지 클래스를 사용할 것 이다. MemberController와 MemberDao다.
각각의 패키지는 java.controller / java.dao 이다.

// MemberController Class
public void selectAllMember() {
		ArrayList<Member> list = new ArrayList<Member>();
		list = dao.selectAllMember();
		System.out.println("회원번호\t아이디\t비밀번호\t이름\t전화번호\t\t나이\t성별\t이메일\t\t\t주소\t\t\t날짜");
		System.out.println("--------------------------------------------------");
		for(Member m : list) {
			System.out.println(m.getMemberNo()+"\t"+m.getMemberId()+"\t"+m.getMemberPw()
            +"\t"+m.getMemberName()+"\t"+m.getPhone()+"\t"+m.getAge()
			+"\t"+m.getGender()+"\t"+m.getEmail()+"\t\t"+m.getAddress()+"\t\t"+m.getEnrollDate());
		}
	}//selectAllMember end
// MemberDao Class
public ArrayList<Member> selectAllMember() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		ArrayList<Member> list = new ArrayList<Member>();
		String query = "select * from member";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			pstmt = conn.prepareStatement(query);
			rset = pstmt.executeQuery();
			while(rset.next()) {
				Member m = new Member();
				m.setAddress(rset.getString("address"));
				m.setAge(rset.getInt("age"));
				m.setEmail(rset.getString("email"));
				m.setEnrollDate(rset.getDate("enroll_date"));
				m.setGender(rset.getString("gender"));
				m.setMemberId(rset.getString("member_id"));
				m.setMemberName(rset.getString("member_name"));
				m.setMemberNo(rset.getInt("member_no"));
				m.setMemberPw(rset.getString("member_pw"));
				m.setPhone(rset.getString("phone"));
				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 {
				rset.close();
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

이 첫번째 구성을 가장 자세히 볼 것이다.
<???이 기호안에 넣으면 왜 안보임>
Controller 클래스에서 하는일은 회원의 ArrayList를 Dao클래스에서 받아와서 출력하는 메소드다. ArrayList[Member]타입의 변수를 선언해서 Dao클래스의 selectAllMember 메소드에서 값을 받는 것 이다. 그래서 dao의 메소드가 ArrayList[Member]를 return하도록 만들어진 것 이다.

이제 중요한 Dao클래스를 보자.
이번 클래스는 하나하나 자세하게 볼 것 이다.
가장 먼저 할 일은 필요한 변수들을 선언하는 것 이다.

1. 변수 선언

Connection conn = null;					//DBMS와 연결을 담당하는 객체
PreparedStatement pstmt = null;			//query를 전송하고 결과를 받아오는 객체
ResultSet rset = null;					//select 수행결과를 가져오는 객체
ArrayList<Member> list = new ArrayList<Member>();	//전체 회원 정보를 저장하고 Controller클래스에 return해줄 자료구조
String query = "select * from member";	//SQL에서 실행할 실행문

메소드를 만들고 가장 처음부터 있는 이 친구들이 변수이다.
어제 포스팅했던 친구랑 다른 친구가있다.
Statement -> PreparedStatement 로 바뀌었다. 이유는 이게 더 빠르고 쓰기도 쉽기 때문이다. Statement에서 상속을 받는 친구인데 얘가 더 빠르고 query쓰기에도 편하고 좋다. 이거쓰자.
그리고 악용해서 정보를 빼내는 것도 막아준다.

Connection

Connection은 DBMS와 연결을 담당하는 객체다. 즉 Connection을 사용해서 OracleSql, MySql등과 연결해주는 것 이다.

PreparedStatement

PreparedStatement는 쿼리를 전송하고 결과를 받아오는 객체다. PreparedStatement를 통해 쿼리 정보가 왔다갔다 한다.

ResultSet

ResultSet은 Select의 수행 결과를 저장하는 객체이다.

나머지

ArrayList를 선언한 이유는 ResultSet으로 정보를 저장하고 그 정보를 List에다가 하나씩 넣어서 모든 Row를 저장하기 위해서다. 그리고 Controller 클래스로 보낸다.
String query는 이따가 PreparedStatement로 보낼 쿼리문을 미리 작성한 것 이다.

다음으로 가보자.

2. 사용할 드라이버 선언

Class.forName("oracle.jdbc.driver.OracleDriver");

eclipse 프로젝트에 우클릭 -> properties -> javaBuildPath -> Libraries에서 미리 DBMS드라이버를 등록해놓아야 이 코드가 작동한다. 각자의 DBMS타입에 맞는 드라이버를 넣어주자.
코드로 넣어놓은 드라이버를 등록하는 코드이다.

3. 등록된 클래스를 이용해 DB연결

conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");

OracleSql은 1521의 포트번호를 가지고있어서 1521을 넣어준다. 각자의 DBMS에 맞는 포드번호를 넣어주도록하자. 다른 DBMS들이 어떤 port를 사용하고있는지는 모르겠다...
어쨌든 위의 코드를 정리해보자면

conn = DriverManager.getConnection
("접속할 프로그램, ip","접속할 DBMS계정","접속할 DBMS 비밀번호");

의 구성으로 되어있다.

4. 쿼리문의 결과 받아올 prepareStatement 객체 생성

pstmt = conn.prepareStatement(query);

아까 conn이 연결을 담당해준다고 했다. 미리 짜놓았던 query문을 conn을 이용해서 DBMS로 보내고, conn에서 쿼리 객체를 받아오는prepareStatement기능을 이용해서 쿼리문의 결과를 받아오는 것 이다. 그리고 그 값을 아까 만들어줬던 PreaparedStatement 객체에 넣어준다.
이 과정에서 우리가 짜놓은 query문이 문제가없는지 검토한다. 그 이후 값을 처리한다.

5. 쿼리문을 전송하여 실행 / 실행결과를 받아와 저장

rset = pstmt.executeQuery();

이 코드가 수행 결과를 저장한다.

while(rset.next()) {
		Member m = new Member();
		m.setAddress(rset.getString("address"));
		m.setAge(rset.getInt("age"));
		m.setEmail(rset.getString("email"));
		m.setEnrollDate(rset.getDate("enroll_date"));
		m.setGender(rset.getString("gender"));
		m.setMemberId(rset.getString("member_id"));
		m.setMemberName(rset.getString("member_name"));
		m.setMemberNo(rset.getInt("member_no"));
		m.setMemberPw(rset.getString("member_pw"));
		m.setPhone(rset.getString("phone"));
		list.add(m);
}

rset.next코드는 테이블의 모든 값을 가져오는 코드라고 보면 편하다. Row가 5개 있다고 생각하면 처음에 1번째 Row를 조회하고 값이 있다면 True를 반환한다. 총 5변 반환한다는 뜻이다.
어쨌든 rset.next코드를 사용해서 값이 들어있는 만큼 출력해주자.
모든 반복마다 ArrayList에 Member값을 넣어주는 것도 잊지말자.

6.사용한 자원 반환

finally {
			try {
				rset.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

사용했던 자원들을 잊지말고 반환해주자.

마지막으로 list를 return하는 것 으로 이 메소드는 종료된다.

이런 형식으로 진행되는 것 이다. 이제 하나하나 빠르게 특징만 잡아서 볼 것이다.

아이디로 회원 조회

// MemberController Class
public void selectOneMember() {
		System.out.print("조회할 회원 아이디 입력 : ");
		String id = sc.next();
		Member m = dao.selectOneMember(id);
		if(m==null) {
			System.out.println("정보를 조회할 수 없습니다.");
		}else {
			System.out.println("번호 : "+m.getMemberNo());
			System.out.println("아이디 : "+m.getMemberId());
			System.out.println("비밀번호 : "+m.getMemberPw());
			System.out.println("이름 : "+m.getMemberName());
			System.out.println("전화번호 : "+m.getMemberNo());
			System.out.println("나이 : "+m.getAge());
			System.out.println("성별 : "+m.getGender());
			System.out.println("이메일 : "+m.getEmail());
			System.out.println("주소 : "+m.getAddress());
			System.out.println("가입일 : "+m.getEnrollDate());
		}
	}//selectOneMember end
//MemberDao Class
public Member selectOneMember(String id) {
		//1. 필요한변수 선언
		Connection conn = null;
		//Statement를 대체할 PreparedStatement
		//PreparedStatement는 Statement를 상속해서 구현한 클래스 -> Statement기능 + @
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		Member m = null;
		//PreparedStatement는 쿼리문 작성 시 인자부분을 위치홀더(?)로 표시
		//위치홀더는 값으로만 사용이 가능(컬럼이름, 테이블이름 으로는 사용이 불가능)
		//위치홀더(?) : sql구문에 나타내는 토큰, 실제 sql문이 실행되기전에 반드시 값으로 대체해야함
		String query = "select * from member where member_id =?";
		
		try {
			//2. 사용할 드라이버 선언
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//3. Connection 생성
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//4. 쿼리문을 수행하고 결과를 받아올 객체생성(Statement -> PreparedStatement)
			//객체생성메소드가 preepareStatement() -> 매개변수로 query를 전달
			//query를 전달하는 이유는 uqery가 정상인지 문법검사를 수행
			pstmt = conn.prepareStatement(query);
			//query가 정상이라면 위치홀더를 값으로 대체
			pstmt.setString(1, id);//첫번째 위치홀더에 값을 id변수값으로 대체
			//5. 쿼리문 수행후 결과 저장
			rset = pstmt.executeQuery();
			if(rset.next()) {
				m = new Member();
				m.setAddress(rset.getString("address"));
				m.setAge(rset.getInt("age"));
				m.setEmail(rset.getString("email"));
				m.setEnrollDate(rset.getDate("enroll_date"));
				m.setGender(rset.getString("gender"));
				m.setMemberId(rset.getString("member_id"));
				m.setMemberName(rset.getString("member_name"));
				m.setMemberNo(rset.getInt("member_no"));
				m.setMemberPw(rset.getString("member_pw"));
				m.setPhone(rset.getString("phone"));				
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				rset.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return m;
	}// selectOneMember end

헷갈릴까봐 주석도 넣어뒀다. 나 볼라구... 내가 헷갈릴거같다.
아까와 다른점이 있다면 ptstmSrting이라는 코드가 들어온것과 while이 if 로 바뀐 것 이다.
또 아까는 ArrayList 형을 받아왔는데 이번에는 Member 형태이다. 이외에는 같다고 볼 수 있다.

pstmt.setString

pstmtString은 설정해준 query문의 변수에 값을넣어주는 것 이다.
pstmt에서 변수는 ?으로 넣어준다.

String query = "select * from member where member_id =?";

아까 선언한 query 코드이다.
그리고

pstmt.setString(1, id);//첫번째 위치홀더에 값을 id변수값으로 대체

이게 값을 넣어주는 코드이다.

if를 사용한 이유

if를 사용한 이유는 Member_ID는 unique로 제약조건을 걸어놨기 때문에, 값은 1개 아니면 0개가 나오기 때문이다. 굳이 하나하나 다 조회하는 while을 쓸 이유가 없기 때문이라는 것 이다.

이름으로 회원 조회

// MemberController Class
public void selectMemberName() {
		System.out.print("이름으로 조회할 회원의 이름을 입력 : ");
		String searchName = sc.next();
		ArrayList<Member> list = dao.selectMemberName(searchName);
		
		
		if(list.size()==0) {	// list.isEmpty() : 리스트가 비어있는지 판단하는메소드 == (list.size()==0);
			System.out.println("일치하는 정보가 없습니다.");
		}else {
			System.out.println("회원번호\t아이디\t비밀번호\t이름\t전화번호\t\t나이
									\t성별\t이메일\t\t\t주소\t\t\t날짜");
			for(Member m : list) {
				System.out.println(m.getMemberNo()+"\t"+m.getMemberId()+"\t"+m.getMemberPw()
								+"\t"+m.getMemberName()+"\t"+m.getPhone()+"\t"+m.getAge()
								+"\t"+m.getGender()+"\t"+m.getEmail()+"\t\t"+m.getAddress()
								+"\t\t"+m.getEnrollDate());
			}
		}
	}//selectMemberName end

어후 진짜 너무길다. 옆으로

//MemberDao Class
public ArrayList<Member> selectMemberName(String searchName){
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		String addName = "%"+searchName+"%";
		ArrayList<Member> list = new ArrayList<Member>();
		String query = "select * from member where member_id like ?";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver"); //oracle.jdbc.driver.OracleDriver
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, addName);
			rset = pstmt.executeQuery();
			while(rset.next()) {
				Member m = new Member();
				m.setAddress(rset.getString("address"));
				m.setAge(rset.getInt("age"));
				m.setEmail(rset.getString("email"));
				m.setEnrollDate(rset.getDate("enroll_date"));
				m.setGender(rset.getString("gender"));
				m.setMemberId(rset.getString("member_id"));
				m.setMemberName(rset.getString("member_name"));
				m.setMemberNo(rset.getInt("member_no"));
				m.setMemberPw(rset.getString("member_pw"));
				m.setPhone(rset.getString("phone"));
				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 {
				rset.close();
				conn.close();
				pstmt.close();				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}//selectMemberName end

이번에는 다 똑같은데 매개변수로 String값 이름을 받아와서 그 이름을 포함하고있는 모든 이름을 출력해주는 메소드이다.

위치홀더에 Like값 넣어주기

위치홀더 '?'에 Like 비교값인 '-'나'%'을 넣어주기 위해서 그냥 저 비교값까지 한번에 선언해주어야한다. 그래서 필자는 Controller Class에서 이름을 받아오고 비교값까지 포함하도록 한번 더 String을 선언했다.

String addName = "%"+searchName+"%";
String query = "select * from member where member_id like ?";
pstmt.setString(1, addName);

이렇게 만들어준 것 이다.

회원 정보 등록

//MemberController Class
public void insertMember() {
		System.out.println(" -------- 회원 정보 입력 ------- ");
		System.out.print("아이디 입력 : ");
		String memberId = sc.next();
		System.out.print("비밀번호 입력 : ");
		String memberPw = sc.next();
		System.out.print("이름 입력 : ");
		String memberName = sc.next();
		System.out.print("전호번호 입력 [ex.010.0000.0000] : ");
		String phone = sc.next();
		System.out.print("나이 입력 : ");
		int age = sc.nextInt();
		System.out.print("성별 입력 : ");
		String gender = sc.next();
		System.out.print("이메일 입력 : ");
		String email = sc.next();
		System.out.print("주소 입력 : ");
		sc.nextLine();
		String address = sc.nextLine();
		Member m = new Member(0, memberId, memberPw, memberName, phone, age, gender, email, address, null);
		int result = dao.insertMember(m);
		if(result>0) {
			System.out.println("정보를 입력했습니다.");
		}else {
			System.out.println("정보를입력하지 못했습니다!");
		}
	}//insertMember end
//MemberDao Class
public int updateMember(Member m) {
		//1. 필요한 변수 선언
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "update member set member_pw=?, phone=?, email=?, address=? where member_id=?";
		try {
			//2. 드라이버 선언
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//3. Connection 생성
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//4. PreparedStatement 생성
			pstmt = conn.prepareStatement(query);
			// 검사 후 값 넣어주기
			pstmt.setString(1, m.getMemberPw());
			pstmt.setString(2, m.getPhone());
			pstmt.setString(3, m.getEmail());
			pstmt.setString(4, m.getAddress());
			pstmt.setString(5, m.getMemberId());
			// 5. 
			result = pstmt.executeUpdate();	
			if(result>0) {
				conn.commit();
			}else {
				conn.rollback();
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}// update end

여기서부터는 DBMS에서 SELECT를 하는게 아니라 INSERT, UPDATE, DELETE를 해주기때문에 ResultSet 대신에 int값으로 return을 받아온다.

int result = 0;

이 변수가 나중에 업데이트를 했는데 안했는지 알려주는 변수가 될 것이다.

pstmt.setString(1, m.getMemberId());
	pstmt.setString(2, m.getMemberPw());
	pstmt.setString(3, m.getMemberName());
	pstmt.setString(4, m.getPhone());
	pstmt.setInt(5, m.getAge());
	pstmt.setString(6, m.getGender());
	pstmt.setString(7, m.getEmail());
	pstmt.setString(8, m.getAddress());

위 코드를 이용해 집어넣을 값을 넣어준다.

result = pstmt.executeUpdate();

다음 위 코드로 return값을 받아온다 아까 했던 코드들은 Row를 직접 받아왔지만, INSERT, UPDATE, DELETE는 컬럼이 적용된 수를 리턴하기 때문이다.

if(result>0) {
				conn.commit();
			}else {
				conn.rollback();
			}

INSERT가 성공적으로 됐다면 commit해주고 그렇지 않다면 rollback해주자.

회원 정보 수정

//MemberController Class
public void updateMember() {
		System.out.print("수정할 회원 아이디 입력 : ");
		String memberId = sc.next();
		Member m = dao.selectOneMember(memberId);
		if(m == null) {
			System.out.println("정보를 조회할 수 없습니다.");
		}else {
			Member member = new Member();
			System.out.print("수정할 비밀번호 입력 : ");
			member.setMemberPw(sc.next());
			System.out.print("수정할 전화번호 입력 : ");
			member.setPhone(sc.next());
			System.out.print("수정할 이메일 입력 : ");
			member.setEmail(sc.next());
			sc.nextLine();
			System.out.print("수정할 주소 입력 : ");
			member.setAddress(sc.nextLine());
			member.setMemberId(memberId);
			int result = dao.updateMember(member);
			if(result>0) {
				System.out.println("정보변경 성공");
			}else {
				System.out.println("정보변경 실패");
			}
		}
	} //updateMember end
public int updateMember(Member m) {
		//1. 필요한 변수 선언
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "update member set member_pw=?, phone=?, email=?, address=? where member_id=?";
		try {
			//2. 드라이버 선언
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//3. Connection 생성
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			//4. PreparedStatement 생성
			pstmt = conn.prepareStatement(query);
			// 검사 후 값 넣어주기
			pstmt.setString(1, m.getMemberPw());
			pstmt.setString(2, m.getPhone());
			pstmt.setString(3, m.getEmail());
			pstmt.setString(4, m.getAddress());
			pstmt.setString(5, m.getMemberId());

			result = pstmt.executeUpdate();	
			if(result>0) {
				conn.commit();
			}else {
				conn.rollback();
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}// update end

Controller Class를 봐보자.

Member m = dao.selectOneMember(memberId);

먼저 아까 만들어두었던 1명을 아이디로 조회하는 메소드를 이용해 수정하려는 회원이 있는지부터 확인한다. 만약 없다면 정보를 조회할 수 없다는 메세지를 띄우고 메소드를 종료한다.

if(m == null) {
			System.out.println("정보를 조회할 수 없습니다.");
		}

그게 아니라면 수정할 정보들을 입력받고 Dao클래스에 전해준다.

else {
			Member member = new Member();
			System.out.print("수정할 비밀번호 입력 : ");
			member.setMemberPw(sc.next());
			System.out.print("수정할 전화번호 입력 : ");
			member.setPhone(sc.next());
			System.out.print("수정할 이메일 입력 : ");
			member.setEmail(sc.next());
			sc.nextLine();
			System.out.print("수정할 주소 입력 : ");
			member.setAddress(sc.nextLine());
			member.setMemberId(memberId);
			int result = dao.updateMember(member);

그리고 DAO클래스에서 업데이트를 하고 int값을 받아와 update가 잘 됐는지 확인해보면 끝이다.

회원 정보 삭제

얘가 진짜 쉽다. 코드도 짧다.

//MemberController Class
public void deleteMember() {
		System.out.println("회원 정보 삭제");
		System.out.print("삭제할 회원 아이디 입력 : ");
		String memberId = sc.next();
		int result = dao.deleteMember(memberId);
		if(result>0) {
			System.out.println("삭제완료!");
		}else {
			System.out.println("일치하는 데이터가 없습니다!");
		}
	}//deleteMember end

짧아서 너무 좋다

//MemberDao Class
public int deleteMember(String memberId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int result = 0;
		String query = "delete from member where member_id = ?";		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","jdbc","1234");
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, memberId);
			result = pstmt.executeUpdate();	
			
			if(result>0) {
				conn.commit();
			}else {
				conn.rollback();
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}

얘도 뭐 딱히 설명할게 없다 이제는
그냥 지우고 싶은 회원 아이디 입력하고 지우면 끝이다.

이렇게 프로그램을 짜보면서 sql과 java를 연동하는 방법을 익혀봤다.
아직은 솔직히 헷갈린다.
더 해보면서 익숙해져야겠다.
여기까지 포스팅해야겠다.
안뇽!

0개의 댓글