JDBC - 기본 코드 이해하자

김지인·2022년 7월 2일
0

메모리상에 드라이버 올리기

Class.forName(" driver "); //드라이브 연결

(못찾을 경우는 ClassNotFoundException 예외발생)

드라이버 연결

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user_ID, user_password); 
// DB에 접속하는 객체 담기

로드된 드라이버와 Connection을 연결해주는 객체 DriverManager사용

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user_ID, user_password);
Statement st = con.createStatement 

연결된 connection객체에서 SQL 구문을 실행하는 역할을 하는 statement 호출

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

Statement객체의 executeQuery에 SQL구문을 담아 ResultSet객체에 담아 (ResultSet)타입으로 결과값을 저장.


드라이버 종료

함수들이 호출 된 후에 컴퓨터의 자원을 계속 사용할 우려가 있어서 해당 로직실행의 끝에는 close()사용.

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user_ID, user_password);
Statement st = con.createStatement;
ResultSet rs = st.executeQuery(sql);
.
.//임의의 로직
.
.
rs.close();
st.close();
con.close();

con ㅡ> st ㅡ> rs 순서로 실행되고 있으므로 종료할때는 역순으로 진행.


결과값을 담을 이유가 없을땐 ?

우리가 read를 할때는 데이터를 받아와서 객체에 담아주는데, 그 외에 생성과 삭제와 업데이트는 데이터를 받을 필요가 있을까?

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user_ID, user_password);
Statement st = con.createStatement(sql);
.
.//임의의 로직
.
.
st.close();
con.close();

데이터를 받을 필요가 없으므로 바로 sql구문으로 명령을 내려준다.

데이터 입력을 좀 더 편하게

우리가 데이터를 입력해야 하는 상황이라고 생각하자.

그렇다면 코드는 이러할 것이다.

String url = "INSERT INTO member ("
				+ "    id,"
				+ "    pwd,"
				+ "    name"
				+ "    "
				+ ") VALUES ("
				+ "    'dfadsfsadf',"
				+ "    '12344',"
				+ "    '덕이네'"
				+ "    "
				+ ")";
//임의로 구성한 테이블
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user_ID, user_password);
Statement st = con.createStatement(sql);
.
.//임의의 로직
.
.
st.close();
con.close();

한눈에 봐도 데이터 넣기에 가독성이 매우 떨어지지 않는가?

이러한 것은 PreparedStatement객체를 이용하여 해결할 수 있다.

String sql = "INSERT INTO member ("
		+ "    id,"
		+ "    pwd,"
		+ "    name"
		+ "    "
		+ ") VALUES (?,?,?)";
//임의로 구성한 테이블
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "c##bmm522", "1234");
PreparedStatement st = con.prepareStatement(sql);

데이터를 넣는 방식이 매우 깔끔해 진것을 볼 수 있다.

profile
에러가 세상에서 제일 좋아

0개의 댓글