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


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类型数据的列)。
  • 一个Reader对象,包含要存储到表中的数据文件。
FileReader fileReader = new FileReader("javafx_contents.txt");
pstmt.setClob(1, fileReader);
or,
pstmt.setCharacterStream(1, fileReader);

**BLOB**是**b**inary **l**arge **o**bject的缩写,它可以容纳可变数量的数据,最大长度为65535个字符。

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

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);
or,
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 {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql:///sampledatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Inserting values
      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表的内容,您可以看到插入的图像和文本值,如下所示:

更新于:2019年7月30日

2K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.