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的序列化或反序列化时出现错误