Module  java.sql.rowset

Package javax.sql.rowset.serial

提供实用程序类以允许Java编程语言中的SQL类型和数据类型之间的可序列化映射。

标准JDBC RowSet实现可以使用这些实用程序类来辅助断开连接的RowSet对象的序列化。 当通过线路将断开连接的RowSet对象传输到应用程序中的不同VM或跨层时,这是有用的。

1.0串行数组

SQL编程语言中的可序列化映射SQL ARRAY值。

SerialArray类提供了一个从Array对象创建一个SerialArray实例的构造函数,获取基类型的基本类型和SQL名称的方法以及复制SerialArray对象的全部或部分的方法。

2.0 SerialBlob

在Java编程语言中的可序列化映射的SQL BLOB值。

SerialBlob类提供了一个从Blob对象创建实例的构造函数。 请注意, SerialBlob对象应该在SerialBlob构建一个SerialBlob对象之前将SQL BLOB值的数据传递给客户端。 SQL BLOB值的数据可在客户端上以字节(使用方法的阵列Blob.getBytes )或作为未解释的字节流(使用方法Blob.getBinaryStream )。

SerialBlob方法可以使SerialBlob对象的副本作为字节数组或流。 它们还可以在Blob对象中找到给定的字节模式或SerialBlob对象。

3.0 SerialClob

SQL编程语言中的可序列化映射SQL CLOB值。

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 JAVA_OBJECT值的Java编程语言中的可序列化映射。 假设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吸气剂方法的读取器方法。 这些方法可以读取SQLInputImpl对象中的值。 方法wasNull用于确定最后读取的值是否为SQL NULL。

当调用一个构造函数或getter方法来调用一个Map对象时,JDBC驱动程序调用方法SQLData.getSQLType来确定定制映射的UDT的SQL类型。 驱动程序创建一个SQLInputImpl的实例,并使用UDT的属性进行填充。 然后,驱动程序将输入流传SQLData.readSQL方法SQLData.readSQL ,该方法又调用SQLInputImpl方法从输入流读取属性。

10.0 SQLOutputImpl

用于将自定义映射用户定义类型(UDT)的属性写入数据库的输出流。 驱动程序在内部使用此接口,并且其方法从不由应用程序员直接调用。

当应用程序调用方法PreparedStatement.setObject ,驱动程序将检查要写入的值是否是具有自定义映射的UDT。 如果是,则在类型映射中将包含一个条目,该条目包含为此UDT实现SQLData的类的Class对象。 要写入的值为SQLData的实例,驱动程序将创建一个SQLOutputImpl的实例,并将其传递给方法SQLData.writeSQL 方法writeSQL依次调用适当的SQLOutputImpl写入器方法将数据从SQLData对象写入到作为SQL用户定义类型的表示形式的SQLOutputImpl输出流。

自定义映射

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对象,并给出了一个与AUTHORSAuthors相关联的条目。
  java.util.Map map = new java.util.HashMap();
    map.put("SCHEMA_NAME.AUTHORS", Class.forName("Authors"); 
Map对象映射现在包含一个具有SQL结构类型的完全合格的名称,条目Class对象类Authors 它可以传递给一个方法来告诉司机如何将AUTHORS映射到Authors

对于断开连接的RowSet对象,只有当一个Map对象传递给将要执行自定义映射的方法或构造函数时,才能进行自定义映射。 连接的RowSet对象的情况是不同的,因为它们保持与数据源的连接。 执行自定义映射并由断开连接的RowSet对象调用的方法可以使用与Map使用的Map对象相关联的Connection对象。 换句话说,如果没有指定地图,则默认情况下可以使用连接的类型映射。