에포스트그레스, 대형 객체 (라고도 함블롭)는 다음을 유지하는 데 사용됩니다. 일반 SQL 테이블에 저장할 수 없는 데이터베이스의 데이터입니다. 테이블/인덱스 쌍으로 저장되며 OID 값으로 테이블을 소유합니다.
이제 대형 개체를 윈 토토하는 방법이 있습니다. 첫 번째는 표준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()가 호출됩니다.