본 내용은 뉴렉처 님의 자바 JDBC 프로그래밍 강의를 참고하여 작성하였습니다.
JDBC는 각 DBMS의 차이를 단일화 시켜준다. 따라서 개발자는 다른 DBMS에 접근하기 위해 코드를 바꿀 필요가 없다. JDBC를 이용하기 위해서는 실제 구동 코드를 가지고 있는 JDBC Driver가 필요하다.
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(...);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
쿼리를 실행하면 서버에 결과 집합이 만들어지는데, 서버는 결과 집합을 사용자에게 한번에 다 돌려주는 것이 아니다. 커서가 Before of File > End of File 까지 순차적으로 이동하며 레코드 단위로 결과를 반환한다.
ResultSet은 사용자에게 전달된 레코드를 담는 그릇이다.
rs.next();
String title = rs.getString("title");
package ex1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Program {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@localhost:1521/xepdb1";
String sql = "SELECT * FROM NOTICE"";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "NEWLEC", "****");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
if(rs.next()) {
String title = rs.getString("TITLE"); //컬럼명은 대소문자 구분X
System.out.println(title);
}
//역순으로 닫기
rs.close();
st.close();
con.close();
}
}
각 컬럼이 갖고 있는 형식
에 맞게 값을 가져오고 반복문
을 이용하여 모든 레코드가 출력되도록 작성하라.
if(rs.next()){
int id = rs.?("ID");
String title = rs.?("TITLE");
String writerId = rs.?("WRITER_ID");
Date regDate = rs.?("REGDATE");
String content = rs.?("CONTENT");
int hit = rs.?("hit");
System.out.printf("id:%d, title:%s, writerId:%s, regDate:%s, content:%s, hit:%d\n",
id, title, writerId, regDate, content, hit);
}
while(rs.next()){
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writerId = rs.getString("WRITER_ID");
Date regDate = rs.getDate("REGDATE");
String content = rs.getString("CONTENT");
int hit = rs.getInt("hit");
System.out.printf("id:%d, title:%s, writerId:%s, regDate:%s, content:%s, hit:%d\n",
id, title, writerId, regDate, content, hit);
}
위의 연습문제 1을 조회수가 10 이상인 게시글만 출력되도록 수정하라.
출력하기 전에 조건문을 사용하는 방법과 SELECT문에서 WHERE절을 사용하는 방법이 있다. 사용자가 볼 때 두 방법의 결과는 같다. 그러나 전자의 경우와 같이 모든 데이터를 가져와서 데이터의 수만큼 반복시킬 필요는 없다. 따라서 SQL문을 이용하여 필요한 데이터만 필터링해 가져오는 것이 더 효율적이다.
데이터 필터링, 정렬, 그룹화 등의 모든 데이터 연산은 데이터베이스에서 처리한다. 자바는 UI 레이아웃만, 데이터 가공처리는 SQL이 담당해야 한다.