如何使用JDBC从表中检索二进制数据?

SQL数据库在其中提供了一个名为Blob(二进制大对象)的数据类型,您可以存储诸如图像之类的大型二进制数据。

为了从表中检索二进制(流)值,JDBC在PreparedStatement接口中提供了一种称为getBinaryStream()的方法。

它接受一个代表表列索引的整数,并从中检索二进制数据。

您可以使用此方法从表中检索二进制数据,如下所示:

FileInputStream fin = new FileInputStream("javafx_logo.jpg");
pstmt.setBinaryStream(3, fin);

示例

让我们使用CREATE语句在MySQL中创建一个名称为tutorials_data的表,如下所示-

CREATE TABLE tutorials_data(
   Name VARCHAR(255),
   Type VARCHAR(50),
   Logo BLOB
);

以下JDBC程序建立与MySQL的连接,并将3条记录插入tutorials_data表中。

作为第3列LOGO的值,该程序存储二进制数据(本地目录中的图像),并检索该表的所有记录。

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BinaryDataToTable {
   public static void main(String args[]) throws Exception {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/sampledatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //插入值
      String query = "INSERT INTO tutorials_dataa(Name, Type, Logo) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      pstmt.setString(2, "Java_library");
      FileInputStream fin = new FileInputStream("javafx_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();
      pstmt.setString(1, "CoffeeScript");
      pstmt.setString(2, "scripting Language");
      fin = new FileInputStream("coffeescript_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();
      pstmt.setString(1, "Cassandra");
      pstmt.setString(2, "NoSQL database");
      fin = new FileInputStream("cassandra_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();
      System.out.println("Records inserted......");
   }
}

输出结果

Connection established......
Data inserted
Name: JavaFX, Tutorial Type: Java_library, Logo: java.io.ByteArrayInputStream@7bfcd12c
Name: CoffeeScript, Tutorial Type: scripting Language, Logo: java.io.ByteArrayInputStream@42f30e0a
Name: Cassandra, Tutorial Type: NoSQL database, Logo: java.io.ByteArrayInputStream@24273305