如何使用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表的内容,您可以看到插入的图像和文本值,如下所示:

数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP