728x90
반응형

코딩 절차 및 사용 예시

//필드선언
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";  //db서버의 컴퓨터 주소 //jdbc:oracle:thin:드라이버 타입
String username = "testSQL";  //접속할 sql데이터의 사용자 이름
String password = "test";	  //비밀번호

1. DriverManager에 해당 DBMS Driver 등록

2. 해당 Driver로부터 Connection instance 획득

3. Connection instance로부터 Statement instance 획득

4. Statement method를 이용하여 SQL문 실행

5. 실행 후 결과를 ResultSet(Select) 혹은 int형 변수(DML)로 받아서 처리

6. 사용한 자원 반납

 

 

DML인 경우 예시

public int insertMenu(Member m) {
		int result = 0;
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = "insert into member values(?,?,?,?,?,?,?,?,?,default)"; //세미콜론은 사용하지 말것
		
		try {
			//1. driver 클래스 등록 : ClassNotFoundException(발생시 오타나 jre에 ojdbc6가 잘 등록 되었는지 확인해보기)
			Class.forName("oracle.jdbc.OracleDriver");  //오타있으면 예외처리됨
			
			//2. Connection 객체 생성 : oracle db server url, username, password
			conn = DriverManager.getConnection(url, username, password);
			conn.setAutoCommit(false);    //트랜잭션 처리를 위해 반드시 쓰기
			//기본값 true, DML요청시 자동커밋 설정
			//commit메소드 호출이 없어도, 연결해제시 자동 커밋됨(t/f상관없이)
			
			//3. Statement 객체 생성 : PreparedStatement
			//미완성 sql문 전달
			pstmt = conn.prepareStatement(sql);
			//String sql = "insert into member values(?,?,?,?,?,?,?,?,default)"의 물음표 채우는 작업
			pstmt.setString(1, m.getMemberId());     
			pstmt.setString(2, m.getPassword());
			pstmt.setString(3, m.getMemberName());
			pstmt.setString(4, m.getGender());
			pstmt.setInt(5, m.getAge());            
			pstmt.setString(6, m.getEmail());
			pstmt.setString(7, m.getPhone()); 
			pstmt.setString(8, m.getAddress());
			pstmt.setString(9, m.getHobby());
			
			//4. 쿼리 실행 : 결과값 받기
			//DML인 경우 executeUpdate() : int
			//DQL인 경우 executeQuery() : ResultSet
			result = pstmt.executeUpdate();
			
			//5. 트랜잭션 처리 : commit/rollback
			if(result > 0) conn.commit();  //pstmt.commit아님
			else conn.rollback();
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//6. 자원반납 (빼먹으면 사용할 메모리 없어서 뻑날수 있음)
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

 

DDL인 경우 예시

public Member selectOneMember(String memberId) {
		Member m = null;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		String sql = "select * from member where member_id = ?";   //잘 작동하는지 sql dev에서 확인하면 좋음
        
		try {
        	//jdbc사용법
			//1. driver클래스 등록
			Class.forName("oracle.jdbc.OracleDriver");
			
			//2. Connection 객체 생성
			conn = DriverManager.getConnection(url, username, password);
			
			//3. PreparedStatement 객체 생성 : 미완성쿼리 값대입
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memberId);
			
			//4. 쿼리실행
			rset = pstmt.executeQuery();
			
			//5. ResultSet -> Member
			if(rset.next()) {  //1아니면 0이니까 while이나 if둘다 쓸 수 있음
				memberId = rset.getString("member_id");  //위에 선언한게 있음
				String password = rset.getString("password");  
				String memberName = rset.getString("member_name");  
				String gender = rset.getString("gender");  
				int age = rset.getInt("age");  
				String email = rset.getString("email");  
				String phone = rset.getString("phone");  
				String address = rset.getString("address");  
				String hobby = rset.getString("hobby");  
				Date enrollDate = rset.getDate("enroll_date");  
				
				//한행의 정보 -> 멤버객체로 담아줌
				m = new Member(memberId, password, memberName, gender, 
									  age, email, phone, address, hobby, enrollDate);
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		} finally {
			//6. 자원반납 - 생성했던 역순으로
			try {
				rset.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}	
		return m;

 

 

반응형
복사했습니다!