Postgresql 7.4.30 Tài tỷ lệ kèo bóng đá tối nay | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 31.JDBCgiao diện | Chuyển tiếp nhanh | NEXT |
PostgreSQLcung cấp hai Những cách khác biệt để lưu trữ tỷ lệ kèo bóng đá tối nay. tỷ lệ kèo bóng đá tối nay có thể được lưu trữ trong một bảng sử dụng kiểu dữ liệubyteahoặc bởi sử dụng tính năng đối tượng lớn lưu trữ tỷ lệ kèo bóng đá tối nay trong một bảng riêng ở định dạng đặc biệt và đề cập đến bảng đó bằng cách Lưu trữ giá trị của loạioidTrong của bạn bàn.
Để xác định phương pháp nào phù hợp bạn cần Hiểu những hạn chế của từng phương pháp. ThebyteaKiểu dữ liệu không phù hợp để lưu trữ rất Một lượng lớn tỷ lệ kèo bóng đá tối nay. Trong khi một cột loạibyteacó thể chứa tới 1 GB tỷ lệ kèo bóng đá tối nay, nó sẽ Yêu cầu một lượng lớn bộ nhớ để xử lý một giá trị lớn như vậy. Phương pháp đối tượng lớn để lưu trữ tỷ lệ kèo bóng đá tối nay phù hợp hơn Để lưu trữ các giá trị rất lớn, nhưng nó có những hạn chế riêng. Cụ thể xóa một hàng có chứa một đối tượng lớn Tham chiếu không xóa đối tượng lớn. Xóa lớn Đối tượng là một hoạt động riêng biệt cần được thực hiện. Lớn Các đối tượng cũng có một số vấn đề bảo mật vì bất kỳ ai kết nối với cơ sở dữ liệu có thể xem và/hoặc sửa đổi bất kỳ đối tượng lớn nào, ngay cả khi Họ không có quyền xem/cập nhật hàng có chứa Tham chiếu đối tượng lớn.
Phiên bản 7.2 là bản phát hành đầu tiên củaJDBCTrình điều khiển hỗ trợbyteaKiểu dữ tỷ lệ kèo bóng đá tối nay. Sự ra đời của điều này
Chức năng trong 7.2 đã đưa ra một sự thay đổi trong hành vi
so với các bản phát hành trước đó. Kể từ 7.2, các phương thứcgetBytes ()
, setBytes ()
, getBinaryStream ()
vàsetBinaryStream ()
hoạt động trênbyteaKiểu dữ tỷ lệ kèo bóng đá tối nay. Trong 7.1 và sớm hơn, các phương pháp này
hoạt động trênoidKiểu dữ tỷ lệ kèo bóng đá tối nay được liên kết
với các đối tượng lớn. Có thể hoàn nguyên trình điều khiển trở lại
hành vi cũ 7.1 bằng cách đặt thuộc tínhtương thíchtrênkết nối
Đối tượng cho giá trị7.1.
Để sử dụngbyteaKiểu dữ tỷ lệ kèo bóng đá tối nay bạn nên
chỉ cần sử dụnggetBytes ()
,
setBytes ()
, getBinaryStream ()
hoặcsetBinaryStream ()
Phương pháp.
Để sử dụng chức năng đối tượng lớn, bạn có thể sử dụngLargeObject
lớp được cung cấp bởiPostgreSQL JDBCtrình điều khiển hoặc bằng cách sử dụnggetBlob ()
vàsetBlob ()
Phương pháp.
quan trọng:Bạn phải truy cập các đối tượng lớn trong mộtSQLKhối giao dịch. Bạn có thể bắt đầu một khối giao dịch bằng cách gọi
setautocommit (false)
.
tỷ lệ kèo bóng đá tối nay ý:Trong một bản phát hành trong tương lai củaJDBCtrình điều khiển,
getBlob ()
vàsetBlob ()
Phương pháp không còn tương tác với các đối tượng lớn và thay vào đó sẽ hoạt động trên kiểu dữ tỷ lệ kèo bóng đá tối naybytea. Vì vậy, nó được khuyến nghị rằng bạn sử dụnglớn
APINếu bạn có ý định sử dụng Các đối tượng lớn.
Ví dụ 31-8Chứa một số ví dụ về cách xử lý tỷ lệ kèo bóng đá tối nay bằng cách sử dụng PostgreSQLJDBCtrình điều khiển.
Ví dụ 31-8. Xử lý tỷ lệ kèo bóng đá tối nay trongJDBC
Ví dụ: giả sử bạn có một bảng chứa tệp Tên của hình ảnh và bạn cũng muốn tỷ lệ kèo bóng đá tối nay trữ hình ảnh trong mộtbyteacột:
Tạo hình ảnh bảng (văn bản imgname, img bytea);
Để chèn một hình ảnh, bạn sẽ sử dụng:
Tệp tệp = Tệp mới ("MyImage.gif"); FileInputStream fis = new FileInputStream (tệp); Đã chuẩn bị ps = Conn.Preparestatement ("chèn vào các giá trị hình ảnh (?,?)"); ps.setString (1, file.getName ()); ps.SetBinaryStream (2, fis, file.length ()); ps.executeUpdate (); ps.close (); fis.close ();
ở đây,setBinaryStream ()
Chuyển số lượng byte đã đặt từ một luồng vào cột
loạibytea. Điều này cũng có thể đã được
hoàn thành bằng cách sử dụngsetBytes ()
Phương pháp
Nếu nội dung của hình ảnh đã ở trongbyte []
.
Truy xuất một hình ảnh thậm chí còn dễ dàng hơn. (Chúng tôi sử dụngChuẩn bị
ở đây, nhưngcâu lệnh
lớp có thể được sử dụng như nhau.)
11603_11922
Ở đây tỷ lệ kèo bóng đá tối nay được lấy dưới dạngbyte []
. Bạn có thể đã sử dụng mộtInputStream
Đối tượng thay thế.
Ngoài ra, bạn có thể tỷ lệ kèo bóng đá tối nay trữ một tệp rất lớn và
muốn sử dụngLargeObject
APIĐể tỷ lệ kèo bóng đá tối nay trữ tệp:
Tạo bảng ImageSLO (văn bản imgname, imgoid oid);
Để chèn một hình ảnh, bạn sẽ sử dụng:
// Tất cả các cuộc gọi API lớn phải nằm trong khối giao dịch Conn.SetAutoCommit (sai); // Yêu cầu Trình quản lý đối tượng lớn thực hiện các hoạt động với LargeObjectManager lobj = ((org.postgresql.pgconnection) Conn). // Tạo một đối tượng lớn mới int oid = lobj.create (lớn // Mở vật thể lớn để viết LargeObject obj = lobj.open (OID, LargeObjectManager.Write); // Bây giờ hãy mở tệp Tệp tệp = Tệp mới ("MyImage.gif"); FileInputStream fis = new FileInputStream (tệp); // sao chép dữ tỷ lệ kèo bóng đá tối nay từ tệp vào đối tượng lớn byte buf [] = byte mới [2048]; int s, tl = 0; while ((s = fis.read (buf, 0, 2048)) 0) obj.Write (BUF, 0, S); tl += s; // Đóng đối tượng lớn obj.close (); // Bây giờ chèn hàng vào ImageSLO Đã chuẩn bị ps = Conn.Preparestatement ("chèn vào các giá trị hình ảnh (?,?)"); ps.setString (1, file.getName ()); ps.setInt (2, oid); ps.executeUpdate (); ps.close (); fis.close ();
Truy xuất hình ảnh từ đối tượng lớn:
// Tất cả các cuộc gọi API lớn phải nằm trong khối giao dịch Conn.SetAutoCommit (sai); // Yêu cầu Trình quản lý đối tượng lớn thực hiện các hoạt động với LargeObjectManager lobj = ((org.postgresql.pgconnection) Conn). Đã chuẩn bị ps = con.preparestatement ("chọn imgoid từ ImageSLO trong đó imgname =?"); ps.setString (1, "myimage.gif"); Resultset rs = ps.executeQuery (); if (rs! = null) while (rs.next ()) // Mở vật thể lớn để đọc int oid = rs.getInt (1); LargeObject obj = lobj.open (OID, LargeObjectManager.read); // Đọc dữ tỷ lệ kèo bóng đá tối nay byte buf [] = byte mới [obj.size ()]; obj.Read (buf, 0, obj.size ()); // Làm điều gì đó với dữ tỷ lệ kèo bóng đá tối nay đọc ở đây // Đóng đối tượng obj.close (); Rs.close ();