inPostgres, các đối kèo bóng đá pháp (còn được gọi làBlobs) được kèo bóng đá pháp để giữ Dữ liệu trong cơ sở dữ liệu không thể được lưu trữ trong bảng SQL bình thường. Chúng được lưu trữ dưới dạng cặp bảng/chỉ mục và được đề cập từ Các bảng riêng, theo giá trị OID.
Bây giờ, bạn có các phương pháp kèo bóng đá pháp các đối tượng lớn. Đầu tiên là tiêu chuẩnJDBCCách và là ghi lại ở đây. Cái khác, kèo bóng đá pháp tiện ích mở rộng của chúng tôi cho API, trình bày đối tượng lớn libpqAPIđến Java, cung cấp quyền truy cập tốt hơn vào lớn Đối tượng hơn tiêu chuẩn. Trong nội bộ, trình điều khiển kèo bóng đá pháp Tiện ích mở rộng để cung cấp hỗ trợ đối tượng lớn.
inJDBC, Cách truy cập tiêu chuẩn họ đang kèo bóng đá pháp phương thức getBinaryStream () trong resultset và Phương thức setBinaryStream () trong PreparedStatement. Những phương pháp này làm cho Đối tượng lớn xuất hiện dưới dạng luồng Java, cho phép bạn kèo bóng đá pháp Gói Java.io và các gói khác, để thao tác đối tượng.
Ví dụ: giả sử bạn có một bảng chứa tên tệp của một hình ảnh và một đối kèo bóng đá pháp chứa hình ảnh đó:
tạo hình ảnh bảng (tên imgname, imgoid oid);
Để chèn một hình ảnh, bạn sẽ kèo bóng đá pháp:
Tệp = Tệp mới (myImage.gif); FileInputStream fis = new FileInputStream (tệp); PreadStatement PS = Conn.Preparestatement (Chèn vào kèo bóng đá pháp giá trị hình ảnh (?,?)); ps.setString (1, file.getName ()); ps.SetBinaryStream (2, fis, file.length ()); ps.executeUpdate (); ps.close (); fis.close ();
Bây giờ trong ví dụ này, SetBinary chuyển đổi một số lượng đã đặt byte từ một luồng vào một vật thể kèo bóng đá pháp và lưu trữ oid vào Trường giữ một tham chiếu đến nó.
Truy xuất một hình ảnh thậm chí còn dễ dàng hơn (tôi đang kèo bóng đá pháp PreadStatement Ở đây, nhưng câu lệnh có thể được kèo bóng đá pháp như nhau):
PREPPORPChọn OID từ hình ảnh trong đó tên =?); Ps.SetString (1,myImage.gif); Resultset rs = ps.executeQuery (); if (rs! = null) while (rs.next ()) InputStream là = rs.GetBinaryInputStream (1); // kèo bóng đá pháp luồng theo một cách nào đó ở đây là.close (); Rs.close ();
Bây giờ ở đây bạn có thể thấy nơi đối kèo bóng đá pháp được lấy dưới dạng Đầu vào. Bạn cũng sẽ nhận thấy rằng chúng tôi đóng luồng trước Xử lý hàng tiếp theo trong kết quả. Đây là một phần củaJDBCĐặc điểm kỹ thuật, trong đó nói rằng Bất kỳ đầu vào nào được trả về đều được đóng khi resultset.next () hoặc Resultset.close () được gọi.