当前位置: 首页 > 编程笔记 >

如何使用JDBC将二进制数据插入表中?

皇甫礼骞
2023-03-14
本文向大家介绍如何使用JDBC将二进制数据插入表中?,包括了如何使用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表中。

作为第三列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 {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/sampledatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //插入值
      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......
 类似资料:
  • 问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :

  • 问题内容: 我试图在不使用准备好的语句的情况下将一些Binary数据插入MySQL数据库。原因是我将成千上万条语句连接到一个插入中,一次运行一次。(MySQL转储和导入的工作原理) 我已经尝试了以下语句,但是都失败了: 插入my_table值(1,’g = F| }X ‘,2); 插入my_table值(1,CAST(’g = F| }X ‘as BINARY),2); 插入my_table值(1

  • 问题内容: 我有两个用Java编写的应用程序,它们通过网络使用XML消息相互通信。我在接收端使用了SAX解析器,以从消息中获取数据。要求之一是将二进制数据嵌入XML消息中,但是SAX不喜欢这样。有谁知道如何做到这一点? 问题答案: XML是如此多才多艺… XML就像暴力-如果它不能解决问题,则说明你使用的不够多。 编辑: 顺便说一句:Base64 + CDATA可能是最好的解决方案

  • 我的MySQL数据库中有两个表: 另外,如何获取给定名称的数据? 任何帮助都是非常感谢的!

  • 本文向大家介绍如何使用JDBC将数据插入具有自动递增列的表中?,包括了如何使用JDBC将数据插入具有自动递增列的表中?的使用技巧和注意事项,需要的朋友参考一下 在将数据插入具有自动递增列的表中时,只需保留该特定列,并使用INSERT语句的以下语法指定其余列即可插入剩余值- 示例 让我们使用CREATE语句在MySQL数据库中创建一个名称为sales的表,其中一列自动递增,如下所示- 以下JDBC程

  • 问题内容: 我需要帮助,以从R语言向SQL服务器写入一个简单的数据行。(使用RODBC或其他方式)。 问题答案: 您可以使用where写入所有数据(所有行)。这将在您的数据库中创建一个带有名称的表。 然后,您可以通过附加现有表。