혹시 명시적으로 서버로
begin work;
......... large object 처리 .........
end work;
이렇게 명시적으로 transaction block 을 설정해서 그 안에서 처리를 시도해 보았는지요.
>>김일형 님께서 쓰시길<<
:: 안녕하세요, 김일형입니다.
::
:: 그리 경험이 많지 않아서 님의 설명과 프로그래머 매뉴얼을 보고 테스트를 해봤는데...
::
:: ps.setBinaryStream(2, fis, (int)file.length());
::
:: 정확하게 여기서 예외가....
:: InputStream을 매개변수로 사용할 수 없다는 충격적인....
:: 매뉴얼에도 분명되는 것으로 나오는데...말이죠...
::
:: 단 한가지 님이 잊고 넘어가신 것은 ....
:: ---------------------------------------------------------------------------
:: Important: For Postgres, you must access Large Objects within an SQL transaction. You would open
:: a transaction by using the setAutoCommit() method with an input parameter of false:
::
:: Connection mycon;
:: ...
:: mycon.setAutoCommit(false);
:: ... // now use Large Objects
:: ----------------------------------------------------------------------------
:: 라고 매뉴얼에 나왔있슴당.... 거대객체는 SQL 트랜젝션 내에서만 이루어져야 한다는 것인데... 그러
:: 니가 제생각에는 커넥션을 얻은 다음에는 Auto Commit을 중지 시켜야한다는 것이죠.
::
:: 그런데 그렇게 해도 여전히 예외가 떨어지던데요.... -__-;;;;
::
:: 제가 시간이 없어서 오랫동안 삽질을 해보지는 않았는데요... 한번 계속 디벼보겠습니다.
::
:: 죄송합니다. 도움이 못되어드려서...
::
:: 김일형.
::
::
:: >>안상훈 님께서 쓰시길<<
::
:: :: 사용환경은
:: :: * Alzza Linux Kernel 2.2.12
:: :: * JDK1.3
:: :: * Postgresql7.1.2
:: ::
:: :: 이렇게 설정되어 있습니다. 이중 large object를 사용하는 message라는 테이블구조는 아래와 같습
:: 니다.
:: ::
:: ::
:: :: CREATE TABLE message (
:: :: mid int PRIMARY KEY,
:: :: message oid
:: :: );
:: ::
:: :: 여기서 Postgres.org 홈페이지에 있는 JDBC를 이용한 large object를 사용하는 샘플코드를 사용해
:: 봤
:: :: 는데 실행시 에러가 납니다. 에러는 다음과 같습니다.
:: ::
:: :: Connection successful!
:: :: InputStream as parameter not supported
:: :: at org.postgresql.jdbc2.PreparedStatement.setBinaryStream(PreparedStatem
:: :: ent.java:476)
:: :: at test.main(test.java:37)
:: ::
:: :: 너무 안되어서 현재 개발버전인 7.2로도 테스트 해보았으나 마찬가지 에러가 납니다. 제가 작성한
:: 샘
:: :: 플코드는 아래와 같습니다.
:: ::
:: :: class test {
:: :: public static void main (String args[]) {
:: :: Connection connection = null;
:: ::
:: :: File file;
:: :: FileInputStream fis;
:: ::
:: :: try {
:: :: file = new File("headcut.jpg");
:: :: fis = new FileInputStream(file);
:: :: } catch (Exception e) {e.printStackTrace(); return;}
:: ::
:: :: try {
:: :: Class.forName ("org.postgresql.Driver");
:: :: connection = DriverManager.getConnection("jdbc:postgresql:jdbcdb", "postgres"
:: , "
:: :: postgres");
:: :: System.out.println ("Connection successful!");
:: :: PreparedStatement ps = connection.prepareStatement("INSERT INTO message VALUE
:: S (
:: :: ?, ?)");
:: :: ps.setInt(1, 1000);
:: :: ps.setBinaryStream(2, fis, (int)file.length());
:: :: ps.executeUpdate();
:: :: ps.close();
:: :: } catch (Exception e){
:: :: e.printStackTrace();
:: :: return;
:: :: }
:: :: }
:: :: }
:: ::
:: :: 아직 JDBC에서 지원이 안되는 것인가요? JDBC는 postgresql소스를 컴파일해서 얻었습니다. 여러 고
:: 수
:: :: 님들의 조언 부탁드립니다.
:: ::
:: :: 감사합니다.
:: ::
|