包 javax.sql.rowset.serial
包javax.sql.rowset.serial
提供实用程序类以允许在 Java 编程语言中的 SQL 类型和数据类型之间进行可序列化映射。
但是,如果在 Java 对象不能立即序列化的情况下序列化是不可能的,则此类将尝试序列化所有非静态成员以允许对象实例状态被序列化。无法序列化静态或瞬态字段,尝试这样做将导致抛出
此外,如果将
当调用采用
当应用程序调用方法
标准 JDBC RowSet
实现可以使用这些实用程序类来帮助序列化断开连接的 RowSet
对象。这在通过线路将断开连接的 RowSet
对象传输到不同的 VM 或在应用程序中跨层传输时非常有用。
1.0 串行数组
SQL ARRAY 值的 Java 编程语言中的可序列化映射。SerialArray
类提供用于从 Array 对象创建 SerialArray
实例的构造函数、用于获取基类型和基类型的 SQL 名称的方法,以及用于复制全部或部分 SerialArray
对象的方法。2.0 SerialBlob
SQL BLOB 值的 Java 编程语言中的可序列化映射。SerialBlob
类提供了一个用于从 Blob 对象创建实例的构造函数。请注意,Blob 对象应该在从它构造 SerialBlob
对象之前将 SQL BLOB 值的数据带到客户端。 SQL BLOB 值的数据可以在客户端具体化为字节数组(使用方法 Blob.getBytes
)或未解释的字节流(使用方法 Blob.getBinaryStream
)。SerialBlob
方法可以将 SerialBlob
对象复制为字节数组或流。它们还可以在 SerialBlob
对象中定位给定的字节模式或 Blob
对象。3.0 SerialClob
SQL CLOB 值的 Java 编程语言中的可序列化映射。SerialClob
类提供了一个构造函数,用于从 Clob
对象创建实例。请注意,Clob
对象应该在从它构造 SerialClob
对象之前将 SQL CLOB 值的数据带到客户端。 SQL CLOB 值的数据可以在客户端具体化为 Unicode 字符流。SerialClob
方法可以从 SerialClob
对象获取子字符串或定位字符模式的开头。5.0 串行数据链路
SQL DATALINK 值的 Java 编程语言中的可序列化映射。 DATALINK 值引用原始数据源管理的基础数据源之外的文件。RowSet
实现可以使用方法 RowSet.getURL()
检索 java.net.URL
对象,该对象可用于操作外部数据。java.net.URL url = rowset.getURL(1);
6.0 SerialJava对象
SQL JAVA_OBJECT 值的 Java 编程语言中的可序列化映射。假设 Java 对象实例实现了 Serializable 接口,这只是简单地包装了序列化过程。但是,如果在 Java 对象不能立即序列化的情况下序列化是不可能的,则此类将尝试序列化所有非静态成员以允许对象实例状态被序列化。无法序列化静态或瞬态字段,尝试这样做将导致抛出
SerialException
。7.0 序列号
SQL REF 类型和 Java 编程语言之间的可序列化映射。SerialRef
类提供用于从 Ref
类型创建 SerialRef
实例的构造函数,并提供用于获取和设置 Ref
对象类型的方法。8.0 串行结构
SQL 结构类型的 Java 编程语言中的可序列化映射。每个尚未序列化的属性都映射到可序列化形式,如果属性本身是结构化类型,则其每个尚未序列化的属性都映射到可序列化形式。此外,如果将
Map
对象传递给构造函数之一或方法 getAttributes
,则根据 Map
对象中指定的map自定义映射结构化类型。SerialStruct
类提供用于从 Struct
对象创建实例的构造函数、用于检索数据库中 SQL 结构类型的 SQL 类型名称的方法以及用于检索其属性值的方法。9.0 SQLInputImpl
用于自定义映射用户定义类型 (UDT) 的输入流。SQLInputImpl
对象是一个输入流,其中包含作为 UDT 属性的值流。当在具有自定义映射的 SQL 结构或不同类型上调用方法 getObject
时,驱动程序在后台使用此类;程序员从不直接调用 SQLInputImpl
方法。SQLInputImpl
类提供了一组类似于 ResultSet
getter 方法的读取器方法。这些方法可以读取 SQLInputImpl
对象中的值。方法wasNull
用于判断最后读取的值是否为SQL NULL。当调用采用
Map
对象的构造函数或 getter 方法时,JDBC 驱动程序调用方法 SQLData.getSQLType
来确定自定义映射的 UDT 的 SQL 类型。驱动程序创建 SQLInputImpl
的实例,并使用 UDT 的属性填充它。然后,驱动程序将输入流传递给方法 SQLData.readSQL
,后者又调用 SQLInputImpl
方法从输入流中读取属性。10.0 SQLOutputImpl
用于将自定义映射用户定义类型 (UDT) 的属性写回数据库的输出流。驱动程序在内部使用这个接口,应用程序程序员永远不会直接调用它的方法。当应用程序调用方法
PreparedStatement.setObject
时,驱动程序会检查要写入的值是否是具有自定义映射的 UDT。如果是,则类型map中将有一个条目,其中包含为该 UDT 实现 SQLData
的类的 Class 对象。如果要写入的值是 SQLData
的实例,则驱动程序将创建 SQLOutputImpl
的实例并将其传递给方法 SQLData.writeSQL
。 writeSQL
方法依次调用适当的 SQLOutputImpl
编写器方法,将数据从 SQLData
对象写入 SQLOutputImpl
输出流,作为 SQL 用户定义类型的表示。
自定义映射
JDBC API 提供了将 SQL 结构化类型或 DISTINCT 类型映射到 Java 编程语言的机制。通常,结构化类型映射到类,其属性映射到类中的字段。 (可以认为 DISTINCT 类型具有一个属性。)但是,还有许多其他可能性,并且可能有任意数量的不同映射。程序员通过实现接口 SQLData
来定义映射。例如,如果名为 AUTHORS 的 SQL 结构类型具有 NAME、TITLE 和 PUBLISHER 属性,则它可以映射到名为 Authors 的 Java 类。 Authors 类可以具有名称、标题和出版商字段,AUTHORS 的属性映射到这些字段。在这种情况下,SQLData
的实现可能如下所示:
public class Authors implements SQLData { public String name; public String title; public String publisher; private String sql_type; public String getSQLTypeName() { return sql_type; } public void readSQL(SQLInput stream, String type) throws SQLException { sql_type = type; name = stream.readString(); title = stream.readString(); publisher = stream.readString(); } public void writeSQL(SQLOutput stream) throws SQLException { stream.writeString(name); stream.writeString(title); stream.writeString(publisher); } }
java.util.Map
对象用于关联 SQL 结构类型及其到类 Authors
的映射。以下代码片段显示了如何创建 Map
对象并为其提供关联 AUTHORS
和 Authors
的条目。
java.util.Map map = new java.util.HashMap(); map.put("SCHEMA_NAME.AUTHORS", Class.forName("Authors");
Map
对象map现在包含一个条目,该条目具有 SQL 结构类型的完全限定名称和类 Authors
的 Class
对象。它可以传递给一个方法来告诉驱动程序如何将 AUTHORS
映射到 Authors
。
对于断开连接的 RowSet
对象,只有在将 Map
对象传递给将执行自定义映射的方法或构造函数时,才能完成自定义映射。对于已连接的 RowSet
对象,情况有所不同,因为它们保持与数据源的连接。执行自定义映射并由断开连接的 RowSet
对象调用的方法可以使用与正在使用的 Connection
对象关联的 Map
对象。所以,换句话说,如果没有指定map,默认情况下可以使用连接的类型映射。
-
类描述
Array
对象的序列化版本,它是 SQLARRAY
值在 Java 编程语言中的映射。SQLBLOB
值的 Java 编程语言中的序列化映射。SQLCLOB
值的 Java 编程语言中的序列化映射。SQLDATALINK
值的 Java 编程语言中的序列化映射。除了DATALINK and JAVAOBJECT
等 SQL 类型之外,还指示BLOB, CLOB, STRUCT or ARRAY
等 SQL 类型的序列化或反序列化错误SQLJAVA_OBJECT
值的 Java 编程语言中的可序列化映射。Ref
对象的序列化映射,它是 SQLREF
值在 Java 编程语言中的映射。SQL 结构类型的 Java 编程语言中的序列化映射。用于自定义映射用户定义类型 (UDT) 的输入流。用于将自定义映射的用户定义类型 (UDT) 的属性写回数据库的输出流。