如何使用 JDBC 从表中检索二进制数据?
jdbcobject oriented programmingprogramming
SQL 数据库提供了一种名为 Blob(二进制大对象)的数据类型,您可以在其中存储图像等大型二进制数据。
为了从表中检索二进制(流)值,JDBC 在 PreparedStatement 接口中提供了一个名为 getBinaryStream() 的方法。
它接受一个表示表列索引的整数,并从中检索二进制数据。
您可以使用此方法从表中检索二进制数据,如下所示 −
FileInputStream fin = new FileInputStream("javafx_logo.jpg"); pstmt.setBinaryStream(3, fin);
示例
让我们使用如下所示的 CREATE 语句在 MySQL 中创建一个名为 tutorials_data 的表 −
CREATE TABLE tutorials_data( 名称 VARCHAR(255), 类型 VARCHAR(50), Logo BLOB );
以下 JDBC 程序建立与 MySQL 的连接,并将 3 条记录插入 tutorials_data 表。
该程序将二进制数据(来自本地目录的图像)作为第三列 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......"); } }
输出
连接已建立...... Data inserted Name: JavaFX, Tutorial Type: Java_library, Logo: java.io.ByteArrayInputStream@7bfcd12c Name: CoffeeScript, Tutorial Type: scripting Language, Logo: java.io.ByteArrayInputStream@42f30e0a Name: Cassandra, Tutorial Type: NoSQL database, Logo: java.io.ByteArrayInputStream@24273305