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