如何使用 JDBC 将二进制数据插入表中?
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 的连接,并将 3 条记录插入到 tutorials_data 表中。
作为第 3 列 LOGO 的值,此程序使用 **PreparedStatement** 接口的 **setBinaryStream()** 方法存储二进制数据(来自本地目录的图像)。
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 {
//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 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......
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP