이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

대형 토토 핫 객체

포스트그레스, 대형 객체 (라고도 함블롭)는 다음을 유지하는 데 사용됩니다. 일반 SQL 테이블에 저장할 수 없는 데이터베이스의 데이터입니다. 테이블/인덱스 쌍으로 저장되며 다음에서 참조됩니다. OID 값으로 자신의 테이블을 만듭니다.

중요:포스트그레, 대형 개체에 액세스해야 합니다. SQL 트랜잭션 내에서. 비록 이것이 항상 사실이었음에도 불구하고 원칙적으로, 이는 출시될 때까지 엄격하게 시행되지 않았습니다. v6.5. 다음을 사용하여 트랜잭션을 엽니다.setAutoCommit()입력 매개변수가 있는 메소드거짓:

연결 마이콘;
...
mycon.setAutoCommit(false);
... 이제 대형 개체를 토토 핫합니다.

이제 대형 개체를 토토 핫하는 두 가지 방법이 있습니다. 첫 번째는 표준JDBC방법이고, 여기에 문서화되어 있습니다. 다른 하나는 API에 대한 자체 확장을 사용합니다. 이는 libpq 대형 객체를 나타냅니다.APIJava로 변환하여 더 나은 대규모 액세스를 제공합니다. 표준보다 객체. 내부적으로 드라이버는 대형 개체 지원을 제공하는 확장입니다.

JDBC, 액세스하는 표준 방법 ResultSet에서 getBinaryStream() 메소드를 토토 핫하고 있으며 ReadyStatement의 setBinaryStream() 메서드입니다. 이러한 방법은 대형 객체는 Java 스트림으로 나타나므로 java.io 패키지 및 기타 패키지를 토토 핫하여 객체를 조작합니다.

예를 들어, 파일 이름이 포함된 테이블이 있다고 가정해 보겠습니다. 이미지 및 해당 이미지를 포함하는 큰 객체:

테이블 이미지 생성(imgname 이름,imgoid oid);

이미지를 삽입하려면 다음을 사용하십시오:

파일 파일 = 새 파일("myimage.gif");
FileInputStream fis = new FileInputStream(파일);
ReadyStatement ps = conn.prepareStatement("이미지 값에 삽입(?,?)");
ps.setString(1,file.getName());
ps.setBinaryStream(2,fis,file.length());
ps.executeUpdate();
ps.close();
fis.close();

이제 이 예에서 setBinaryStream은 설정된 수의 스트림의 바이트를 대형 객체로 저장하고 OID를 이에 대한 참조를 보유하는 필드입니다.

이미지를 검색하는 것이 훨씬 더 쉽습니다. (나는 ReadyStatement를 토토 핫하고 있습니다. 여기서는 성명도 동일하게 토토 핫할 수 있습니다):

PreparedStatement ps = con.prepareStatement("이름=?인 이미지에서 oid를 선택하십시오.");
ps.setString(1,"myimage.gif");
ResultSet rs = ps.executeQuery();
if(rs!=null) 
    동안(rs.next()) 
        InputStream은 = rs.getBinaryInputStream(1);
        // 여기서 어떤 방식으로든 스트림을 토토 핫합니다.
        is.close();

    rs.close();

이제 여기에서 대형 개체가 검색되는 위치를 볼 수 있습니다. 입력스트림. 또한 이전에 스트림을 닫는 것도 알 수 있습니다. 결과의 다음 행을 처리합니다. 이것은의 일부입니다.JDBC사양은 다음과 같습니다. ResultSet.next() 또는 ResultSet.close()가 호출됩니다.