23.9 데이터 읽기
데이터 읽기는 SELECT 문을 사용한다. PreparedStatement의 executeQuery() 메소드를 호출하여 ResultSet을 얻는다.
ResultSet은 조회된 데이터의 행(row) 집합이다. next() 메소드로 커서를 이동시키며 데이터를 읽는다.
- 1개의 행을 가져올 때:
if (rs.next()) { ... } - 여러 행을 가져올 때:
while (rs.next()) { ... }
데이터 읽기는 get타입(컬럼명) 또는 get타입(컬럼순번) 메소드를 사용한다. (예: getString("userid"), getInt(1))
package ch20.oracle.sec09.exam02;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BoardSelectExample {
public static void main(String[] args) {
Connection conn = null;
try {
// JDBC Driver 등록
Class.forName("oracle.jdbc.OracleDriver");
// 연결하기
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521/orcl",
"java",
"oracle"
);
// 매개변수화된 SQL 문 작성
String sql = "" +
"SELECT bno, btitle, bcontent, bwriter, bdate, bfilename, bfiledata " +
"FROM boards " +
"WHERE bwriter=?";
// PreparedStatement 얻기 및 값 지정
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "winter");
// SQL 문 실행 후 ResultSet을 통해 데이터 읽기
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
// 데이터 행을 읽고 Board 객체 생성
Board board = new Board();
board.setBno(rs.getInt("bno"));
board.setBtitle(rs.getString("btitle"));
board.setBcontent(rs.getString("bcontent"));
board.setBwriter(rs.getString("bwriter"));
board.setBdate(rs.getDate("bdate"));
board.setBfilename(rs.getString("bfilename"));
board.setBfiledata(rs.getBlob("bfiledata"));
// 콘솔에 출력
System.out.println(board);
// 파일로 저장
Blob blob = board.getBfiledata();
if (blob != null) {
InputStream is = blob.getBinaryStream();
OutputStream os = new FileOutputStream("C:/Temp/" + board.getBfilename());
is.transferTo(os);
os.flush();
os.close();
is.close();
}
}
rs.close();
// PreparedStatement 닫기
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
// 연결 끊기
conn.close();
} catch (SQLException e) {}
}
}
}
}
서브목차