RE:LONG RAW


[ Follow Ups ] [ Post Followup ] [ 자바 묻고 답하기 ]

Posted by 윤경구 on November 22, 1997 at 09:42:57:

In Reply to: 오라클 long raw 데이타 Insert & select ? posted by 백승용 on November 21, 1997 at 19:53:08:

제 생각에는 (테스트해보지는 않았어요)
ResultSet.getBinaryStream() 메소드를 사용하는 것이 좋을 것 같습니다.
물론 ResultSet.getBytes() 혹은 ResultSet.getObject() 메소드도 가능할 것 같은데
그것은 LONG RAW 데이터의 크기에 따라 판단하면 될 것 같네요.
JDBC 매뉴얼에서 권장하는 것은 스트림을 사용하는 것입니다.
JDBC 매뉴얼에는 LONGVARBINARY로 나와있네요.



java.sql.Statement stmt = con.createStatement();
ResultSet r = stmt.executeQuery("SELECT xxx FROM Table2");
// 충분한 버퍼를 잡아야겠지요.
byte buff = new byte[4096];
while (r.next()) {
Java.io.InputStream fin = r.getBinaryStream("xxx");
for (;;) {
int size = fin.read(buff);
if (size == -1) { // at end of stream
break;
}
output.write(buff, 0, size);
}
}

보낼 때, 즉 Update할 때에는 PreparedStatement의 IN 인자를 사용하여 byte[]로 넘겨줄 수 있겠네요.
즉, setBytes()를 사용하면 되겠지요.
아니면 아주 큰 데이터일 경우에는 다음과 같이 바이트스트림을 사용해도 되겠네요.



java.io.File file = new java.io.File("C:\images\big.jpg");
int fileLength = file.length();
java.io.InputStream fin = new java.io.FileInputStream(file);
java.sql.PreparedStatement pstmt = con.prepareStatement(
"UPDATE Table5 SET stuff = ? WHERE index = 4");
pstmt.setBinaryStream (1, fin, fileLength);
pstmt.executeUpdate();

참고로 이 예제들은 JDK 1.1.4 에 들어있는 문서의 JDBC 부분을 조금 변형한 것입니다.


Follow Ups:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ Follow Ups ] [ Post Followup ] [ 자바 묻고 답하기 ]