jdbc

최지혜·2022년 10월 8일
0

db

목록 보기
3/5

JDBC 사용하면, 자바 언어로 데이터베이스와 통신할 수 있음

단점은 내가 필요한 부분을 쿼리문 만들어서 쿼리 날리고 질의응답하는 것이 필요함. (3번 과정) -> 코드의 중복이 생김!
그래서, 다음 게시물에서는 JDBC템플릿을 만들 것임. 이 게시물은 그 전 과정.

단계: 드라이버 로딩 - DB 연결 - SQL 작성 및 전송(데이터베이스에 데이터가 삭제 수정 삽입 등의 작업) - 자원해제

1. 드라이버 로딩

Class.forName(driver); 드라이버 로딩

만약 오라클을 쓴다면

private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:~";
(실무에서는 여기에 IP 주소 넣으면 됨)
private String userid = "~";
private String userpw = "~";

하면 오라클을 메모리에 로딩한 것!

2. 연결 개체 가져오기

그 다음은 연결 객체 가져오기! conn (connection)이 브릿지 역할

conn = DriverManager.getConnection(url, userid, userpw);

드라이버로부터 연결 객체 가져오는 코드

3. 쿼리문으로 질의응답~

실제로 쿼리 날릴 거!

String sql = "INSERTT INTO member (memId, memPW, memMail) values (?, ?, ?)";
pstmt.setString(1, member.getMemId());
pstmt.setString(2, member.getMemPW());
pstmt.setString(3, member.getMemMail());

memId, memPW, memMail을 pstmt 이용해서 작성

데이터베이스가 네트워크상으로 연결된 것이기 때문에 반드시 예외 처리 해야 함.

    try {
    	Class.forName(driver);
        conn = DriverManager.getConnection(url, userid, userpw);
		String sql = "INSERTT INTO member (memId, memPW, memMail) values (?, ?, ?)";
		pstmt.setString(1, member.getMemId());
		pstmt.setString(2, member.getMemPW());
	    pstmt.setString(3, member.getMemMail());
		result = pstmt.excecuteUpdate();
    } catch (ClassNotFoundException e) {
    	e.printStackTrace();
    } catch (SQLException e) {
    	e.printStackTrace();

4. 자원 해제

맨 마지막에 finally로 자원을 해제하는 코드도 작성!

finally {
	try
    	if(pstmt != null) pstmt.close();
        if(conn != null) conn.close();
    } catch (SQLException e) {
    	e.printStackTrace();
    }
}

전체 코드

public class MemberDao iplements IMemberDao {
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@localhost:~";
(실무에서는 여기에 IP 주소 넣으면 됨)
	private String userid = "~";
	private String userpw = "~";

	private Commection comm = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;

	@Override
	public int memberInset(Member member) {
		int ressult = 0;
    
    	try {
    		Class.forName(driver);
        	conn = DriverManager.getConnection(url, userid, userpw);
			String sql = "INSERTT INTO member (memId, memPW, memMail) values (?, ?, ?)";
			pstmt.setString(1, member.getMemId());
			pstmt.setString(2, member.getMemPW());
	    	pstmt.setString(3, member.getMemMail());
			result = pstmt.excecuteUpdate();
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	} catch (SQLException e) {
    		e.printStackTrace();
    	}finally {
			try
    			if(pstmt != null) pstmt.close();
        		if(conn != null) conn.close();
        	} catch (SQLException e) {
    			e.printStackTrace();
    		}
		}
    
    	return result;
}

Select 도 만들기

@Override
	public int memberSelect(Member member) {
		Member mem = null;
    
    	try {
    		Class.forName(driver);
        	conn = DriverManager.getConnection(url, userid, userpw);
			String sql = "SELECT * FROM member WHERE memId =? AND memPq = ?";
            pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, member.getMemId());
			pstmt.setString(2, member.getMemPW());
            rs = pstmt.excuteQuery();
            
            while (rs.nest()) {
            	String memId = rs.getString("memId");
                String memPw = rs.getString("mempw");
                String memMail = rs.getString("memMAiol");
                int memPurcNum = rs.getInt("memPurcNum");
                
                mem = new Member();
                mem = new MemId(memId);
                mem = new MemPw(memPw);
                mem = new MembMail(memMail);
                mem = new MemPurcNum(memPurcNum);
            }
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	} catch (SQLException e) {
    		e.printStackTrace();
    	}finally {
			try
    			if(pstmt != null) pstmt.close();
        		if(conn != null) conn.close();
        	} catch (SQLException e) {
    			e.printStackTrace();
    		}
		}
    
    	return result;
}

Update 만들기

	@Override
	public int memberUpdate(Member member) {
    
		int ressult = 0;
    
    	try {
    		Class.forName(driver);
        	conn = DriverManager.getConnection(url, userid, userpw);
			String sql = "UPDATE member SET membPw = ?, memMail = ? WHERE memId = ?";
			pstmt.setString(1, member.getMemId());
			pstmt.setString(2, member.getMemPW());
	    	pstmt.setString(3, member.getMemMail());
			result = pstmt.excecuteUpdate();
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	} catch (SQLException e) {
    		e.printStackTrace();
    	}finally {
			try
    			if(pstmt != null) pstmt.close();
        		if(conn != null) conn.close();
        	} catch (SQLException e) {
    			e.printStackTrace();
    		}
		}
    
    	return result;
}

Delete 만들기

	@Override
	public int memberDelete(Member member) {
    
		int ressult = 0;
    
    	try {
    		Class.forName(driver);
        	conn = DriverManager.getConnection(url, userid, userpw);
			String sql = "DELETE member WHERE memId = ? AND memPw = ?";
            pstmt = conn.prepareStatement(sql)
			pstmt.setString(1, member.getMemId());
			pstmt.setString(2, member.getMemPW());
			result = pstmt.excecuteUpdate();
    	} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	} catch (SQLException e) {
    		e.printStackTrace();
    	}finally {
			try
    			if(pstmt != null) pstmt.close();
        		if(conn != null) conn.close();
        	} catch (SQLException e) {
    			e.printStackTrace();
    		}
		}
    
    	return result;
}
profile
매일 성장하는 개발자

0개의 댓글