如何使用 JDBC 将数据写入表中的 BLOB 和 CLOB 类型列?

jdbcobject oriented programmingprogramming

CLOB 代表字符大对象 (Character Large Object)。通常,SQL Clob 是一种内置数据类型,用于存储大量文本数据。使用此数据类型,您可以存储最多 2,147,483,647 个字符的数据。MYSQL 数据库支持 Clob 数据类型 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT

JDBC API 的 java.sql.Clob 接口代表 CLOB 数据类型。由于 JDBC 中的 Clob 对象是使用 SQL 定位器实现的,因此它包含指向 SQL CLOB(而非数据)的逻辑指针。

将数据插入 Clob 类型的列

您可以使用 PreparedStatement 接口的 setCharacterStream() 或 setClob() 方法插入 CLOB 类型值。这些方法接受两个参数 -

  • 一个整数,用于保存绑定变量的索引。(表示存储 CLOB 类型数据的列)
  • 一个读取器对象,用于保存需要存储到表中的数据。
FileReader fileReader = new FileReader("javafx_contents.txt");
pstmt.setClob(1, fileReader);
或者,
pstmt.setCharacterStream(1, fileReader);

BLOB 是一个二进制大对象,可以存储可变大小的数据,最大长度为 65535 个字符。

BLOB 用于存储大量二进制数据,例如图像或其他类型的文件。MySQL 支持 BLOB 数据类型,包括 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。

JDBC API 的 java.sql.Blob 接口表示 BLOB 数据类型。由于 JDBC 中的 Blob 对象是使用 SQL 定位器实现的,因此它包含指向 SQL BLOB(而非数据)的逻辑指针。

将数据插入 Blob 数据类型的列

您可以使用 PreparedStatement 接口的 setBinaryStream() 或 setBlob() 方法将 BLOB 数据插入表中。这些方法接受两个参数 -

  • 一个整数,用于保存绑定变量的索引。(表示存储 BLOB 类型数据的列)
  • 一个 InputStream 对象,用于保存需要存储到表中的二进制数据(图像)的文件。
InputStream inputStream = new FileInputStream("javafx_logo.jpg");
pstmt.setBlob(1, inputStream);
或者,
pstmt.setBinaryStream(1, inputStream);

以下 JDBC 程序与 MySQL 建立连接,并将 BLOB 和 CLOB 值插入到表 Articles_data 中。

示例

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertingDataToBlobandClob {
   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 articles_data(Name, Article, Logo) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      FileReader fileReader = new FileReader("E:\images\javafx_contents.txt");
      pstmt.setClob(2, fileReader);
      InputStream inputStream = new FileInputStream("E:\images\javafx_logo.jpg");
      pstmt.setBlob(3, inputStream);
      pstmt.execute();
      pstmt.setString(1, "CoffeeScript");
      fileReader = new FileReader("E:\images\coffeescript_contents.txt");
      pstmt.setClob(2, fileReader);
      inputStream = new FileInputStream("E:\images\coffeescript_logo.jpg");
      pstmt.setBlob(3, inputStream);
      pstmt.execute();
      pstmt.setString(1, "JavaFX");
      fileReader = new FileReader("E:\images\cassandra_contents.txt");
      pstmt.setClob(2, fileReader);
      inputStream = new FileInputStream("E:\images\cassandra_logo.jpg");
      pstmt.setBlob(3, inputStream);
      pstmt.execute();
      System.out.println("Records inserted......");
   }
}

输出

Records inserted......

验证

如果您使用 MySQL Workbench 验证articles_data表的内容,您可以观察到插入的图像和文本值为−


相关文章