如何使用 JDBC 将二进制数据插入表中?

jdbcobject oriented programmingprogramming

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

为了将二进制(流)值存储到表中,JDBC 在 PreparedStatement 接口中提供了一个名为 setBinaryStream() 的方法。

它接受一个整数,该整数表示绑定变量的索引,该绑定变量表示保存 BLOB 类型值的列,一个保存二进制数据的 InputStream 对象,并将给定的数据插入到指定的列中。

您可以使用此方法将二进制流数据插入表中,如下所示 −

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 的连接,并在 tutorials_data 表中插入 3 条记录。

该程序使用 PreparedStatement 接口的 setBinaryStream() 方法将二进制数据(来自本地目录的图像)存储为第三列 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("连接已建立......");
      //插入值
      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......
Records inserted......

相关文章