Đọc dữ liệu BLOB từ cơ sở dữ liệu
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class Main { static String url = "jdbc:oracle:thin:@localhost:1521:javaDemo"; static String username = "username"; static String password = "welcome"; public static void main[String[] args] throws Exception { Class.forName["oracle.jdbc.driver.OracleDriver"]; Connection conn = DriverManager.getConnection[url, username, password]; String sql = "SELECT name, description, image FROM pictures "; PreparedStatement stmt = conn.prepareStatement[sql]; ResultSet resultSet = stmt.executeQuery[]; while [resultSet.next[]] { String name = resultSet.getString[1]; String description = resultSet.getString[2]; File image = new File["D:\\java.gif"]; FileOutputStream fos = new FileOutputStream[image]; byte[] buffer = new byte[1]; InputStream is = resultSet.getBinaryStream[3]; while [is.read[buffer] > 0] { fos.write[buffer]; } fos.close[]; } conn.close[]; } }
Ví dụ liên quan trong cùng thể loại
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ữ một 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 loại này là việc sắp xếp và so sánh trên dữ liệu được lưu trữ 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 với 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 phương thức getConnection[] của lớp DriverManager
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 một tuyên bố đã chuẩn bị
Tạo một đối tượng PreparedStatement bằng cách sử dụng phương thức chuẩn bị [] của giao diện Kết nối. Đối với phương thức này, hãy chuyển truy vấn chèn [có trình giữ chỗ] dưới dạng tham số
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];
Bước 3. Đặt giá trị cho người 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 giao diện PreparedStatement . 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 cột 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, hãy truyền một biến số nguyên đại diện cho chỉ mục tham số và một đối tượng của lớp InputStream làm tham số
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];
Bước 4. Thực hiện tuyên bố
Thực thi đối tượng PreparedStatement đã tạo ở trên bằng cách sử dụng phương thức exec[] của giao diện PreparedStatement
Lấy 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ỉ mục của cột [hoặc, giá trị Chuỗi đại diện cho tên của cột] và truy xuất giá trị tại cột đã chỉ định và trả về dưới dạng đối tượng Blob
while[rs.next[]] { rs.getString["Name"]; rs.getString["Type"]; Blob blob = rs.getBlob["Logo"]; }
Phương thức getBytes[] của Giao diện Blob truy xuất nội dung của đối tượng Blob hiện tại và trả về dưới dạng một mảng byte
Sử dụng phương thức getBlob[], bạn có thể đưa nội dung của blob vào một mảng byte và tạo một hình ảnh bằng phương thức write[] của đối tượng FileOutputStream
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 đó. Truy xuất lại và lưu trữ trong hệ thống tệp cục bộ
Chúng tôi sẽ sử dụng bảng
2 trong cơ sở dữ liệu mẫu mysqljdbc. Để minh họa, chúng tôi sẽ thêm một cột nữa có tên làCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
3 vào bảngCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
2. Loại dữ liệu của cột này sẽ làCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
5 có thể chứa tối đa 16 MBCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Câu lệnh ALTER TABLE sau đây thêm cột sơ yếu lý lịch vào bảng
2Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];1
Chúng tôi sẽ sử dụng một sơ yếu lý lịch mẫu ở định dạng PDF và tải tệp này vào cột
3 của bảngCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
2 sau. Các bạn có thể tải file PDF mẫu về thực hành qua link sauCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Tải xuống Sơ yếu lý lịch của John Doe ở định dạng PDF
Viết dữ liệu BLOB vào cơ sở dữ liệu MySQL
Các bước ghi dữ liệu BLOB vào cơ sở dữ liệu MySQL như sau
Đầu tiên, mở một kết nối mới tới cơ sở dữ liệu bằng cách tạo một đối tượng
9 mớiCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Sau đó, xây dựng một câu lệnh CẬP NHẬT và tạo một
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];60 từ đối tượng
9Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];6
Tiếp theo, đọc dữ liệu từ tệp sơ yếu lý lịch mẫu bằng cách sử dụng
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];62 và gọi phương thức
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];63 để đặt tham số cho
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];60
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];2
Sau đó, gọi phương thức
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];65 của đối tượng
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];60
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];5
Cuối cùng, đóng các đối tượng
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];60 và
9 bằng cách gọi phương thứcCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];69
Để đơn giản hóa quy trình tạo
9, chúng tôi sử dụng lớpCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];21 mà chúng tôi đã phát triển trong hướng dẫn trước để mở một kết nối mới. Ví dụ đầy đủ về ghi dữ liệu BLOB vào cơ sở dữ liệu MySQL như sau
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];1
Hãy chạy chương trình
Bây giờ, chúng tôi kiểm tra bảng _____62 cho ứng viên có id 122
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];3
Như bạn thấy, chúng tôi có dữ liệu BLOB được cập nhật trong cột sơ yếu lý lịch của bảng
2 cho bản ghi có id 122.Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Đọc dữ liệu BLOB từ cơ sở dữ liệu MySQL
Quá trình đọc dữ liệu BLOB từ cơ sở dữ liệu tương tự như quá trình ghi BLOB ngoại trừ phần chúng ta ghi dữ liệu BLOB vào tệp
Đầu tiên, mở một kết nối mới đến cơ sở dữ liệu
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];5
Sau đó, xây dựng một câu lệnh SELECT và tạo một
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];60 từ đối tượng
9Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];8
Tiếp theo, đặt tham số và thực hiện truy vấn
pstmt.setString[1, "sample image"]; //Inserting Blob type InputStream in = new FileInputStream["E:\images\cat.jpg"]; pstmt.setBlob[2, in];9
Sau đó, lấy dữ liệu BLOB từ
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];26 và ghi nó vào một tệp
0Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Cuối cùng, gọi phương thức
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection[mysqlUrl, "root", "password"];69 của đối tượng
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];28 và
9. Nếu bạn sử dụng câu lệnh dùng thử tài nguyên, bạn không cần phải làm điều đó một cách rõ ràngCode language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Ví dụ sau minh họa cách đọc dữ liệu BLOB từ cơ sở dữ liệu MySQL
1Code language: Java [java]
Connection conn = DriverManager.getConnection[url,username,password];
Sau khi chạy chương trình, duyệt thư mục project các bạn sẽ thấy có 1 file mới tên là
PreparedStatement pstmt = con.prepareStatement["INSERT INTO MyTableVALUES[?, ?]"];50 được tạo