처음부터 차근차근

JDBC 본문

프로그래밍/JSP

JDBC

_soyoung 2022. 1. 12. 16:20
반응형

JDBC란

먼저 데이터베이스 드라이버에 대해서 알아보자.

db 드라이버는 오라클의 SQL Driveloper, Mysql의 Workbench 같이 데이터베이스에 연결, 인증, 문장 실행, 결과패치 등의 기능을 가진 DB API이다.

db 드라이버 안에는 쿼리 실행에 관련된 코드들이 모두 들어있다.

 

 

jdbc란 데이터베이스 드라이버를 사용하는 것을 좀 더 편리하게 해주는 도구이다.

데이터베이스 드라이버들은 각자 내부적으로 다른 함수를 가지고 있어서 어떤 특정한 db 드라이버를 사용하려면 사용할 db 드라이버가 가지고 있는 함수들을 다 알아야하고, 맞춰서 써야한다.

그래서 데이터베이스를 변경하면 작성했던 코드들도 모두 변경해야한다.

이러한 번거로움을 없애주는 역할이 바로 jdbc이다.

jdbc는 db를 바꾼다하더라도 작성했던 코드를 변경할 필요가 없다.

단일화된 코드를 쓰면 알아서 jdbc가 드라이버에 맞게 가리키기 때문이다.

 

 

jdbc를 사용하려면

1. 드라이버 로드(객체화) ->  Class.forName("oracle.jdbc.driver.OracleDriver"); //얘가 DriverManager라고 생각하기

2. 연결 생성 -> Connection con = DriverManager.getConnection(url, dbId, dbPwd);

3. 문장 실행 -> Statement st = con.createStatement();(쿼리 준비), ResultSet rs = st.executeQuery(sql);(쿼리 실행)

4. 결과 집합 사용 -> rs.getInt("Id");

을 해야한다.

 

잘보면 위에서 만든 객체를 받아서 다음 객체를 만들고, 또 이 객체를 받아서 다음 객체를 만드는 메커니즘을 가지고 있다.

ResultSet rs = st.executeQuery(sql);

이 코드를 실행하면 실행 결과로 ResultSet인 rs가 레코드 집합커서를 가지게 된다.

커서는 처음에 레코드가 아닌 레코드 맨 위를 가리키는데, 이 곳을 Before of File (=bof)이라고 부른다.

그래서 ResultSet을 사용하려면 rs.next()를 해서 커서가 첫 번째 레코드를 가리키게 해야한다.

커서가 첫 번째 레코드를 가리키면 그제서야 비로소 레코드의 데이터를 가져다 쓸 수 있다.

그리고 레코드가 끝나서 레코드가 없는 공간으로 커서가 가리키면 rs.next()의 값이 false가 나온다.

 

+ 결과 레코드 하나 있을 때 if(rs.next())

결과 레코드 여러 개 있을 때 while(rs.next())

 

Statement 쓰는 경우

String sql= "select * from people where id=1";
String url = "jdbc:oracle:thin:@localhost:포트번호/DB이름";
String dbId = "root";
String dbPwd = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, dbId, dbPwd);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
rs.getInt("Id");


rs.close();
st.close();
con.close();

 

PreparedStatement 쓰는 경우

String sql= "select * from people where id=?";
String url = "jdbc:oracle:thin:@localhost:포트번호/DB이름";
String dbId = "root";
String dbPwd = "1234";


Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, dbId, dbPwd);
PreparedStatement st = con.prepareStatement(sql);
st.setInt(1, id_);
ResultSet rs = st.executeQuery();

rs.close();
st.close();
con.close();

 

 

 

데이터베이스 연동 코드 예시

public class PeopleService {
	
	public People getPeopleById(int id_) {
		
		People people = null;
		
		String sql= "select * from people where id=?";
		
		String url = "jdbc:oracle:thin:@localhost:1521/xepdb1";
		String dbId = "root";
		String dbPwd = "1234";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			Connection con = DriverManager.getConnection(url, dbId, dbPwd);
			PreparedStatement st = con.prepareStatement(sql);
			st.setInt(1, id_);
			
			ResultSet rs = st.executeQuery();
			
			if (rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				String zender = rs.getString("zender");
				people = new People(
						id,
						name,
						age,
						zender
						);
			}
			
			rs.close();
			st.close();
			con.close();
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		return people;
	}
}

 

 

 

 

 

출처 : https://www.youtube.com/playlist?list=PLq8wAnVUcTFWxwoc41CqmwnO-ZyRDL0og 변형 및 요약 

반응형

'프로그래밍 > JSP' 카테고리의 다른 글

기업형 mvc 모델과 파일 업로드, String.join()  (0) 2022.01.11
jstl  (0) 2022.01.10
model1과 model2 방식 특징, 라이브러리의 위치, View 페이지 은닉  (0) 2022.01.09
EL  (0) 2022.01.08
JSP  (0) 2022.01.06
Comments