模块  java.sql.rowset

Package javax.sql.rowset.serial

提供实用程序类,以允许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指定了关联AUTHORSAuthors的条目。
  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对象。 因此,换句话说,如果未指定映射,则默认情况下可以使用连接的类型映射。