BLOB là đối tượng lớn nhị phân có thể chứa một lượng dữ liệu thay đổi với độ dài tối đa là 65535 ký tự.
Chúng được sử dụng để lưu trữ lượng lớn dữ liệu nhị phân, chẳng hạn như hình ảnh hoặc các loại tệp khác. Các trường được định nghĩa là TEXT cũng chứa một lượng lớn dữ liệu. Sự khác biệt giữa hai cách này là việc sắp xếp và so sánh trên dữ liệu được lưu trữ có phân biệt chữ hoa chữ thường trên BLOB và không phân biệt chữ hoa chữ thường trong các trường TEXT. Bạn không chỉ định độ dài bằng BLOB hoặc TEXT.
Lưu trữ blob vào cơ sở dữ liệu
Để lưu trữ kiểu dữ liệu Blob vào cơ sở dữ liệu, sử dụng chương trình JDBC, hãy làm theo các bước dưới đây
Bước 1:Kết nối với cơ sở dữ liệu
Bạn có thể kết nối với cơ sở dữ liệu bằng cách sử dụng getConnection () phương pháp của DriverManager lớp học.
Kết nối với cơ sở dữ liệu MySQL bằng cách chuyển URL MySQL là jdbc:mysql:// localhost / sampleDB (trong đó sampleDB là tên cơ sở dữ liệu), tên người dùng và mật khẩu làm tham số cho phương thức getConnection ().
String mysqlUrl ="jdbc:mysql:// localhost / sampleDB"; Connection con =DriverManager.getConnection (mysqlUrl, "root", "password");
Bước 2:Tạo báo cáo được soạn sẵn
Tạo một đối tượng PreparedStatement bằng cách sử dụng standardStatement () phương pháp của Kết nối giao diện. Đối với phương pháp này, hãy chuyển truy vấn chèn (với trình giữ chỗ) dưới dạng tham số.
PreparedStatement pstmt =con.prepareStatement ("CHÈN VÀO MyTableVALUES (?,?)");
Bước 3:Đặt giá trị cho giá trị giữ chỗ
Đặt các giá trị cho các trình giữ chỗ bằng cách sử dụng các phương thức setter của Câu lệnh chuẩn bị giao diện. Chọn các phương thức theo kiểu dữ liệu của cột. Ví dụ:nếu cột thuộc loại VARCHAR, hãy sử dụng phương thức setString () và nếu nó thuộc loại INT, bạn có thể sử dụng phương thức setInt ().
Và nếu nó thuộc loại Blob, bạn có thể đặt giá trị cho nó bằng các phương thức setBinaryStream () hoặc setBlob (). Đối với các phương thức này, truyền một biến số nguyên đại diện cho chỉ số tham số và một đối tượng của lớp InputStream làm tham số.
pstmt.setString (1, "sample image"); // Chèn Blob typeInputStream vào =new FileInputStream ("E:\\ images \\ cat.jpg"); pstmt.setBlob (2, in);Bước 4:Thực thi câu lệnh
Thực thi đối tượng PreparedStatement đã tạo ở trên bằng cách sử dụng execute () phương pháp của Câu lệnh chuẩn bị giao diện.
Truy xuất blob từ cơ sở dữ liệu
Phương thức getBlob () của giao diện ResultSet chấp nhận một số nguyên đại diện cho chỉ số của cột (hoặc, một giá trị Chuỗi đại diện cho tên của cột) và truy xuất giá trị tại cột được chỉ định và trả về dưới dạng đối tượng Blob.
while (rs.next ()) {rs.getString ("Tên"); rs.getString ("Loại"); Blob blob =rs.getBlob ("Biểu trưng");}getBytes () phương pháp của Blob Giao diện truy xuất nội dung của Blob hiện tại đối tượng và trả về dưới dạng một mảng byte.
Sử dụng getBlob () bạn có thể lấy nội dung của đốm màu vào một mảng byte và tạo hình ảnh bằng cách sử dụng write () của FileOutputStream đối tượng.
byte byteArray [] =blob.getBytes (1, (int) blob.length ()); FileOutputStream outPutStream =new FileOutputStream ("path"); outPutStream.write (byteArray);Ví dụ
Ví dụ sau tạo một bảng trong cơ sở dữ liệu MySQL với kiểu dữ liệu blob, chèn hình ảnh vào đó. Lấy nó trở lại và lưu trữ trong hệ thống tệp cục bộ.
nhập java.io.FileInputStream; nhập java.io.FileOutputStream; nhập java.sql.Blob; nhập java.sql.Connection; nhập java.sql.DriverManager; nhập java.sql.PreparedStatement; nhập java.sql. ResultSet; import java.sql.Statement; public class BlobExample {public static void main (String args []) throws Exception {// Đăng ký trình điều khiển DriverManager.registerDriver (new com.mysql.jdbc.Driver ()); // Bắt kết nối String mysqlUrl ="jdbc:mysql:// localhost / sampleDB"; Kết nối con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println ("Kết nối được thiết lập ......"); // Tạo bảng Statement stmt =con.createStatement (); stmt.execute ("TẠO BẢNG SampleTable (Tên VARCHAR (255), BLOB Hình ảnh)"); System.out.println ("Đã tạo bảng"); // Chèn giá trị String query ="INSERT INTO SampleTable (Name, image) VALUES (?,?)"; PreparedStatement pstmt =con.prepareStatement (truy vấn); pstmt.setString (1, "hình ảnh mẫu"); FileInputStream fin =new FileInputStream ("E:\\ images \\ cat.jpg"); pstmt.setBlob (2, vây); pstmt.execute (); // Lấy dữ liệu ResultSet rs =stmt.executeQuery ("select * from SampleTable"); int i =1; System.out.println ("Nội dung của bảng là:"); while (rs.next ()) {System.out.println (rs.getString ("Tên")); Blob blob =rs.getBlob ("Hình ảnh"); byte byteArray [] =blob.getBytes (1, (int) blob.length ()); FileOutputStream outPutStream =new FileOutputStream ("E:\\ hình ảnh \\ blob_output" + i + ". Jpg"); outPutStream.write (byteArray); System.out.println ("E:\\ images \\ blob_output" + i + ". Jpg"); System.out.println (); i ++; }}}Đầu ra
Kết nối được thiết lập ...... Bảng được tạo Nội dung của bảng là:sample imageE:\ images \ blob_output1.jpg