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 ()가 호출됩니다.