이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

큰 윈 토토 사물

inPostgres, 큰 물체 (또한blobs)는 잡는 데 윈 토토됩니다 일반 SQL 테이블에 저장할 수없는 데이터베이스의 데이터. 그들은 테이블/인덱스 쌍으로 저장되며 OID 값으로 자신의 테이블.

이제 큰 물체를 윈 토토하는 방법이 있습니다. 첫 번째는입니다 표준JDBCway 여기에 문서화되었습니다. 다른 하나는 API에 대한 우리 확장을 윈 토토합니다. libpq 큰 객체를 제시하는APIJava에게, 대형에 더 잘 접근 할 수 있습니다 표준보다 물체. 내부적으로 운전자는 다음을 사용합니다 큰 객체 지원을 제공하기위한 확장.

inJDBC, 표준 액세스 방법 그것들은 resultSet에서 getBinaryStream () 메소드를 사용하고 있습니다 준비 상태의 setBinaryStream () 메소드. 이 방법은 만듭니다 큰 물체는 Java 스트림으로 나타나서 사용할 수 있습니다. java.io 패키지 및 다른 사람들은 물체를 조작합니다.

예를 들어 파일 이름이 포함 된 테이블이 있다고 가정합니다. 이미지와 그 이미지를 포함하는 큰 객체 :

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

이미지를 삽입하려면 다음을 사용합니다.

파일 = 새 파일 ( "myimage.gif");
fileInputStream fis = 새로운 fileInputStream (file);
preparedstatement ps = conn.preparestatement ( "이미지 값 (?,?)에 삽입");
ps.SetString (1, file.getName ());
ps.setbinarystream (2, fis, file.length ());
ps.ExecuteUpdate ();
ps.close ();
fis.close ();

이제이 예에서 SetBinaryStream은 세트 번호를 전송합니다. 스트림에서 큰 물체로 바이트를하고 Oid를 안에 저장합니다. 그것에 대한 참조를 보유하고있는 필드.

이미지를 검색하는 것이 훨씬 쉽습니다 (준비된 상태를 윈 토토하고 있습니다 여기서, 그러나 진술은 똑같이 윈 토토할 수 있습니다) :

preparedstatement ps = con.preparestatement ( "name =??");
ps.SetString (1, "myimage.gif");
resultSet rs = ps.ExecuteQuery ();
if (rs! = null) 
    while (rs.next ()) 
        입력 스트림은 = rs.getBinaryInputStream (1);
        // 여기에서 스트림을 사용하십시오
        is.close ();

    rs.close ();

이제 여기에서 큰 물체가 어디로 검색되는지 알 수 있습니다. 입력 스트림. 또한 우리는 이전에 스트림을 닫는다는 것을 알 수 있습니다 결과에서 다음 행을 처리합니다. 이것은의 일부입니다.JDBC사양 resultSet.next () 또는 resultSet.close ()가 호출됩니다.