package jdbc-example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Application {
public static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:XE";
public static final String JDBC_USER = "system";
public static final String JDBC_PW = "oracle";
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("test");
Class.forName("oracle.jdbc.driver.OracleDriver");
try (final Connection conn =
DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PW)) {
final PreparedStatement pstmt =
conn.prepareStatement("SELECT length('abcdbc') FROM dual");
final ResultSet rs = pstmt.executeQuery();
rs.next();
System.out.println(rs.getInt(1));
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
코드 흐름은 크게 다음과 같다.
Class.forName("oracle.jdbc.driver.OracleDriver");
이렇게 하면 JVM에 클래스를 로드해줄 수 있다.
JDBC url 형식을 보자.
jdbc:oracle:thin:[호스트이름]:[포트]:[db이름]
앞선 코드에선 다음과 같이 작성하였다.
jdbc:oracle:thin:@localhost:1521:XE
커넥션 객체를 얻기 위한 코드는 다음과 같다.
final Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE", //JDBC_USER
"id", //JDBC_USER
"password" //JDBC_PW
);
데이터베이스 작업을 하기 위해서는 다음 것들 중 하나가 필요하다.
얻는 방법은 다음과 같다.
// statement
final Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT 1 FORM dual");
// preparedstatement
final PreparedStatement pstmt = conn.prepareStatement("SELECT length('abcdbc') FROM dual");
pstmt.executeQuery();
쿼리를 수행하기 위한 메소드는 다음과 같다.
메소드 이름 | 반환 타입 | 설명 |
---|---|---|
executeQuery | ResultSet: 쿼리 결과 객체 | SELECT(DQL)를 실행한다. |
executeUpdate | int: 영향 받은 row 개수 | DML을 실행한다. |
앞서 얻었던 커넥션을 사용해 연결을 닫는다.
conn.close();
대표적으로 사용하는 객체들
SQL을 실행하기 위해선 크게 다음 세 가지 절차가 필요하다.
메소드 이름 | 반환 타입 | 설명 |
---|---|---|
executeQuery | ResultSet: 쿼리 결과 객체 | DQL를 실행한다. |
executeUpdate | int: affected row(영향 받은 행) 개수 | DML을 실행한다. |
DQL 수행 결과(executeQuery)를 담는 객체. 최초 반환 시 커서는 BOF에 위치해있고, 커서를 그 다음 칸으로 이동 시키는 메소드가 next()
이다. next() 메소드의 반환 값은 EOF의 경우 false, 그 외에는 읽을 행이 남았다는 의미로 true이다.
읽는 메서드는 get으로 시작하는 함수로 두 가지 종류가 있다.
파라미터 | 설명 |
---|---|
getXXXX(int columnIdx) | 칼럼 순서를 지정해서 값을 가져옴 |
getXXXX(String columnLabel) | 칼럼 레이블 이름으로 값을 가져옴 |