안녕하세요, 김일형입니다.
얼마전부터 이 문제를 풀어봐야지 하고 생각을 딥따 많이 했었습니다. 생각만.... ^__^;;
처음에 실행을 할 때는 안됐었습니다. 그리고 얼마 후에 애기가 자는 틈을 타서 해봤는데 그때는 제대로 되는데 실제 데이터베이스 안에는 안들어가더군요.
그런데 오늘 회사 컴에 리눅스를 새로 깔로 다시 테스트를 해보니 되더군요.
아래의 코드는 제가 실행해 본 코드입니다.
CREATE TABLE testlob (
mid int,
filelob oid
);
import java.sql.*;
import java.io.*;
class testlob {
public static void main (String args[]) {
Connection connection = null;
File file;
FileInputStream fis;
try {
file = new File("large.zip");
fis = new FileInputStream(file);
} catch (Exception e) {e.printStackTrace(); return;}
try {
Class.forName ("org.postgresql.Driver");
connection = DriverManager.getConnection("jdbc:postgresql:test_ihkim", "ihkim", "");
System.out.println ("Connection successful!");
connection.setAutoCommit( false );
PreparedStatement ps = connection.prepareStatement("INSERT INTO testlob VALUES (?, ?)");
ps.setInt(1, 1002);
ps.setBinaryStream(2, fis, (int)file.length());
ps.executeUpdate();
connection.commit();
ps.close();
connection.close();
} catch (Exception e){
e.printStackTrace();
return;
}
}
}
이런 코드로 하니까 잘 insert가 되더군요.
지난번에 PostgreSQL 메일링 리스트에 가보니까 large object를 다루는 데에 이전 jdbc드라이버 버젼에 버그가 있었다는 군요. 오늘 jdbc 드라이버를 확인해보니 패키징된 날짜가 6월 13로 되어있었습니다. 디따 최근입니다. 아마 버그 팻치가 된 것이 업된 게 아닌가 하는데요... 아님 말구요...
어쨋든 잘 됩니다. 물론 꺼내 보지는 않았지만요... 테스트에 사용한 파일은 1.6MB짜리 파일이었습니다. 그런데 업하는데 10초는 걸리는 것 같던데요.... 속도는 좀 개선이 되어야하지 않을까 싶네요.
자 그럼 DB를 신나게 디벼보십시요.
김일형.
|