Java BLOB

17 Mar 2025 | 4 分钟阅读

Java 中,BLOBCLOB 是用于分别存储二进制和字符大型对象的两种 数据类型。它与其他数据类型如 float、int、double 等不同。统称为 LOB(大型对象)。

在本节中,我们将讨论 BLOB 数据类型Java 中的 Blob 接口。我们还将 Java 程序中使用 BLOB 数据类型。

BLOB 数据类型

BLOB 代表 二进制大型对象(BLOB)。它是一种内置数据类型,表示一个可变长度的二进制字符串,最长可达 2,147,483,647 个字符。请注意,BLOB 不像其他二进制类型那样与代码页相关联。BLOB 字符串不包含字符数据。

BLOB 的长度以 字节为单位。为了表示 BLOB 数据类型,我们使用 K、MG 字符,分别代表 1024、1024*1024、1024*1024*1024 的倍数。BLOB 的生命周期在事务提交时结束。如果我们想存储非常大的二进制值,应该使用 BLOB 数据类型。例如,在数据库中存储 图像和其他 多媒体文件

为了检索 Blob 类型对象,Java 在 java.sql.ResultSet 上提供了 getBlob() 方法。

BLOB 的限制

LOB 类型存在以下限制。

  • 它不能进行相等性(=)和不相等性(!=, <>)比较。
  • 值是不可排序的,因此不支持 <、<=、>、>= 测试。
  • 它不能用在索引中或作为主键列。
  • DISTINCT、GROUP BY 和 ORDER BY 子句不能应用于 LOB 类型。
  • LOB 类型的隐式转换也是禁止的,因为转换是平台和数据库相关的。

语法

如果我们不指定后缀(K、M 和 G),它将默认使用 G,占用两千兆字节(2,147,483,647)的空间。

示例

上面的 SQL 查询创建了一个名为 Pictures 的表,并以二进制形式存储图像。图像的大小不应超过 16 MB。

Blob 接口

Java Blob 接口属于 java.sql 包。它用于存储大型二进制值。java.sql.Blob 接口的实现是 基于定位器的。这意味着 Blob 实现提供了一个指向 LOB(大型对象)的逻辑指针,而不是对象的副本。在 Blob 中,java.sql.Types 被映射到 SQL 数据类型。

Blob 接口方法

该接口定义了用于获取 SQL BLOB 值长度、在客户端上具体化(实际)BLOB 值以及确定 BLOB 值中字节模式位置的方法。此外,该接口还提供了更新 BLOB 值的方法。如果 JDBC 驱动程序支持该数据类型,则必须完全实现 Blob 接口的所有方法。

Blob 接口的所有方法都抛出 SQLException。如果系统中安装的 JDBC 驱动程序不支持 Blob 接口的任何方法,我们也可以获得 SQLFeatureNotSupportedException

下表描述了 Blob 接口的方法。

返回值方法签名实现说明
byte[]getBytes(long pos, int length)如果 pos < 1、pos 大于长度或 length <= 0,则会引发异常。
longposition(byte[] pattern, long start)该方法用于检索指定的字节数组模式在此 Blob 对象表示的 BLOB 值中开始的字节位置。搜索模式从 start 位置开始。
如果 pattern == null、start < 1 或 pattern 是长度为 0 的数组,则会引发异常。
longposition(Blob pattern, long start)它检索此 Blob 对象指定的 BLOB 值中的字节位置,其中模式开始。搜索从 start 位置开始。
如果 pattern == null、start < 1、pattern 长度为 0,或者在尝试读取模式的第一个字节时引发异常,则会引发异常。
voidfree()该方法释放 Blob 持有的资源。调用 free() 方法后,对象将失效。
InputStreamgetBinaryStream(long pos, long length)它返回一个 InputStream 对象,其中包含部分 Blob 值,从 pos 指定的字节开始,长度为 length 字节。
InputStreamgetBinaryStream()它以流的形式检索 BLOB 值。
longlength()该方法返回此 Blob 对象指定的 Blob 值中的字节数。
OutputStreamsetBinaryStream(long pos)它检索一个可以用于写入此 Blob 对象表示的 BLOB 值的流。流从 pos 位置开始。
intsetByte(long pos, byte[] bytes)该方法将字节数组写入此 Blob 对象表示的 BLOB 值,从 pos 位置开始。它返回写入的字节数。
intsetByte(long pos, byte[] bytes, int offset, int len)该方法将字节数组的全部或部分写入此 Blob 对象表示的 Blob 值,并返回写入的字节数。
voidtruncate(long len)该方法截断 Blob 值。

下一主题Java 计算年龄