안녕하세요. 오늘은 JDBC라는 걸 배워보도록 하겠습니다! JDBC는 자바로 데이터베이스를 접근해서 조작이 가능한 기능인데요. 자바에서도 데이터의 CRUD가 가능하고, 또 그걸 이용해서 프로그램을 제작할 수 있습니다.
JDBC의 architecture 입니다. 이 글은 DB를 Oracle로 사용한다는 전제 하에 적용 가능합니다.
JAVA에서 바로 DB로 접근 할 수는 없고, JAVA에서 제공하는 특별한 JDBC 관련 클래스를 사용해야 합니다. Oracle의 경우 JDBC Driver를 이용해 Oracle로 접근하게 됩니다.
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:0000:XE";
String user = "test";
String password = "1234";
Connection con = DriverManager.getConnection(URL, user, password);
//(1) PreparedStatement 사용
String sql = "select * from member where member_id=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, member_id);
//(2) createStatement 사용
String sql = "select * from member where member_id='"+member_id+"'";
Statement stmt = conn.createStatement(sql);
차이점이 느껴지시나요? PreparedStatement는 '?'라는 곳에 setString() 메서드를 사용해 첫번째 물음표에 전달 받은 member_id 변수를 넣어줍니다.
반변에 createStatement 메서드는 변수를 넣으려면 sql 변수에 일일이 따옴표를 넣어서 중간에 '+'로 문자열을 이어줘야 하는 번거로움이 있습니다.
저렇게 쓰면 안 좋은 점이 쿼테이션을 잘못 닫았거나, 공백이 있거나, 순서가 잘못되면 실행 시 바로 SQL Exception을 때려버립니다.
그래서 DB에 전달 해야할 매개변수들이 많으면 PreparedStatement를 사용하는 게 좋겠죠?
ResultSet rs = stmt.executeQuery("select * from member");
//특정 컬럼 값만 가져오는 것도 가능
ResultSet rs = stmt.executeQuery("select name, id from member");
//조건 절도 사용 가능
ResultSet rs = stmt.executeQuery("select name, id, email from member where member_id='test01'");
ResultSet rs = stmt.executeQuery();
// rs에 저장된 다음 행으로 커서를 옮긴다.
if(rs.next()) {
String id = rs.getString("member_id");
String name = rs.getString("member_name");
String email = rs.getString("member_email");
//int로도 가져올 수 있다.
int number = rs.getInt("number")
}
rs.close(); // ResultSet rs
stmt.close(); // PreparedStatement stmt
conn.close(); // Connection conn
JAVA는 sql과 관련된 클래스를 제공한다고 앞서 말했는데요. JAVA API에서 JAVA.SQL
찾아보면 여러 개의 interfaces를 확인 할 수 있습니다.
오늘 JDBC를 공부해봤는데요. 앞으로의 웹이나 스프링 프로젝트에서 DB를 연결이 필수라 프로젝트에서 DB를 사용하실 거라면 이번 JDBC를 공부하는 게 굉장히 도움이 됩니다.
글 읽어주셔서 감사하고, 행복한 하루 보내세요! 😊