SQL문은 데이터베이스의 데이터에 접근하기 위한 질의문을 말한다. 데이터베이스는 파일시스템에 비해 동시 접근성, 데이터의 무결성 등 파일 시스템과 다른 방식으로 작동한다. 따라서 데이터에 접근하는 방법도 다른데 SQL문이란 데이터베이스 서버에 명령문을 전달하여 원하는 데이터를 추출하거나 수정, 삭제, 등록 할 때 사용하는 질의문을 말한다.
프로그램에서 SQL문을 작성하여 데이터베이스에서 결과를 얻기 위해서는 SQL문을 관리하는 객체가 필요하다. SQL문을 관리하는 객체는 Connection 객체로부터 얻으며 종류는 Statement 객체와 PreparedStatement 객체가 있다.
Statement 클래스
SQL문을 전송할 때 사용하는 객체다. 데이터와 SQL 구문을 문자열 형태로 완성시킨 후 전송하게 된다. 간단하거나 자주 발생되지 않는 SQL문을 전송하고자 할 때 유용하게 사용 되어진다.
Statement 클래스는 다른 Statement 객체의 최상위 클래스이지만 다른 Statement 객체에 비해 속도가 느리며 가장 비효율적이다. 가비지 컬렉션에 해당 되지 않으므로 사용 후 반드시 close() 메소드를 사용하여 종료시켜야 한다.
Statement 객체 얻는 방법
Connection conn = DrvierManager.getConnection(url, id, password);
Statement stm = conn.createStatement();
Statement 객체 사용방법
String sql = "SELECT * FROM person";
ResultSet rs = stm.executeQuery(sql);
PreparedStatement 클래스
PreparedStatement 객체는 SQL문을 처리 할 때 사용되며, 이 객체는 여러 차례 효율적으로 실행하는 목적으로 사용되어 진다. 완전한 SQL 문장이 아닌 IN 매개 변수를 통해서 데이터를 처리하게 된다. Statement 인터페이스에 비해서 SQL 문장 작성에 편리하다. 컴파일 타임을 체크해주며 자주 사용되는 SQL문 혹은 매개변수가 많은 SQL문에서 사용하기 적합하다. 또한 Statement 인터페이스에 비해서 빠른 속도를 제공해 준다. 결과는 ResultSet 객체 혹은 int 형의 데이터를 반환한다.
PreparedStatement 사용방법
Connection conn = DriverManager.getConnection(url, id, password);
pstmt.setString(1, “hello”);
pstmt.setInt(2, 12345);
PreparedStatement 클래스 메소드들
Statement 객체와 동일하나 IN 매개변수를 설정해 주는 메소드들이 추가적으로 존재한다.
setFloat, setDouble
setObject
setString
setTime, setDate, setTimestamp
Statement 객체와 PreparedStatement 객체를 사용하여 Query문을 작성한 후 데이터베이스에 질의
Statement 객체와 PreparedStatement 객체를 이용하여 Query문을 작성했다면 그 객체를 실행할 때는 execute() 메소드나 executeUpdate() 메소드 executeQuery() 메소드를 사용하여 데이터베이스에 질의하고 결과를 얻을 수 있다.
executeUpdate() 메소드
executeQuery() 메소드
execute() 메소드
ResultSet 클래스
SELECT 문장을 수행한 결과 값을 나타내는 객체입니다. ResultSet 자체에 데이터가 들어 있는 것은 아니고 데이터 베이스의 특정 위치를 지시하는 역할을 한다.(일종의 cursor) 데이터베이스는 SELECT 문이 수행하여 얻는 데이터들을 Result-set형태로 반환한다. 이 Result-set를 가리키고 있는 것이 ResultSet 객체이다.
일정량의 데이터는 ResultSet 객체 내부에 버퍼링을 하며 포인터의 역할인 관계로 네트워크를 통한 전송이 불가능하며 Connectin 이 종료된 이후에는 사용 할 수 없다. Statement 가 종료 되면 자동적으로 종료가 된다. 하지만 관습적으로 ResultSet 인터페이스의 close() 메소드를 호출한다. 조회된 결과의 정보는 getMetaData() 메소드를 통해서 얻을 수 있다.
예제
ResultSet result = stmt.executeQuery(“SELECT …”);
while(result.next()) {
String id = result.getString(“ID”);
String name = result.getString(“NAME”);
}
result.close();
ResultSet 클래스 메소드들
void close()
객체 제거
InputStream getAsciiStream(int columnIndex)
처리하고자 하는 데이터를 ASCII 형식의 스트림으로 리턴. 대용량의 ASCII 데이터를 처리할 때 사용합니다.
InputStream getBinaryStream(int columnIndex)
처리하고자 하는 데이터를 어떠한 데이터형으로도 변환하지 않고 스트림으로 리턴. 바이너리 형태의 데이터를 처리할 때 사용
boolean next()
객체가 가르키고 있는 커서를 다음열로 이동합니다.
boolean previous()
객체가 가르키고 있는 커서를 앞열로 이동합니다.
ResultSetMetaData getMetaData()
조회 결과와 관련된 정보 제공을 하는 ResultSetMetaData 객체 리(열의 수, 형태, 프로퍼티등)
Object getObject()
자바에서 제공하는 데이터형이 아닌 형태의 결과 값 가져오기.
예) BLOB, CLOB ...
boolean wasNull()
마지막에 읽힌 열의 값이 SQL Null 인지를 반환합니다.
컬럼의 데이터형에 따른 메소드들
getBoolean
getByte, getShort, getInt, getLong
getDate, getTime, getTimestamp
getFloat, getDouble
getString
'자바(Java) > JAVA 2SE' 카테고리의 다른 글
java.util.Vector - 객체 가변 배열 (0) | 2009.01.14 |
---|---|
자바 예외 처리(Exception Handling) (0) | 2009.01.14 |
DriverManager 객체와 Connection 객체 (0) | 2009.01.13 |
JDBC를 사용하여 데이터베이스와 연결하는 방법 (0) | 2009.01.12 |
애플릿(Applet)이란? (0) | 2009.01.07 |