📄 jdbc2.0.frame8.html
字号:
<p><a name="297973"></a> </p>
<blockquote>
<pre>Ref ref = rs.getRef(1);
</pre>
</blockquote>
<p><a name="297977"></a></p>
<p>从创建它的结果集的第一列检索 <code>Ref</code>
值。缺省情况下,检索 <code>Ref</code> 值的操作并不会实现 <code>Ref</code>
所引用的数据。同样,在缺省情况下,当<strong>会话</strong>或连接处于打开状态时,Ref
值将保持有效状态。可以覆盖这些缺省值,但是 JDBC 2.0 API
也没有规定具体的操作步骤。</p>
<p><a name="298124"></a><code>Ref </code>接口<strong>没有</strong>提供取消引用的方法。而是可以将
<code>Ref</code> 作为输入参数传给适当的 SQL
语句,再由该语句取回它所引用的对象。详细信息,参见单独的 JDBC
API 文档。</p>
<p><a name="298008"></a> </p>
<h4>8.4.2 存储 ref</h4>
<p>可以调用 <code>PreparedStatement.setRef()</code> 方法来将 <code>Ref</code>
作为输入参数传递到预先准备好的语句。</p>
<p><a name="298010"></a> </p>
<h4>8.4.3 元数据增加部分</h4>
<p>在 <code>java.sql.Types </code>中增加了新的类型代码,即 <code>REF</code>。当
JDBC 支持<code>Ref</code> 数据类型时,由诸如 <code>DatabaseMetaData.getTypeInfo()</code>
和 <code>DatabaseMetaData.getColumns() </code>的方法返回该值。</p>
<p><a name="297939"></a> </p>
<h3>8.5 Distinct 类型</h3>
<h4>8.5.1 检索 distinct 类型</h4>
<p>缺省情况下,通过调用 distinct 类型相应的基本类型的 <code>getXXX()</code>
方法,可以检索 SQL 类型 DISTINCT
的数据。例如,假设给出以下类型声明: </p>
<p><a name="298138"></a> </p>
<p><a name="298143"></a> CREATE TYPE MONEY AS NUMERIC(10,2) </p>
<p><a name="298144"></a> </p>
<p><a name="298145"></a>可以采用以下方法来检索 MONEY 类型的值: </p>
<p><a name="298148"></a> </p>
<blockquote>
<pre>java.math.BigDecimal bd = rs.getBigDecimal(1);
</pre>
</blockquote>
<p><a name="298389"></a></p>
<p>这是因为 JDBC 已将基本 SQL NUMERIC 类型映射到 <code>java.math.BigDecimal</code>
类型。</p>
<p><a name="298152"></a> </p>
<h4>8.5.2 保存 distinct 类型</h4>
<p>可以采用 SQL DISTINCT 类型相应的基本类型的 <code>PreparedStatement.setXXX()</code>
方法来将该 distinct
类型的输入参数传给预先准备好的语句。例如,如果给出以上的 MONEY
类型的定义,则可以使用 <code>PreparedStatement.setBigDecimal() </code>。</p>
<p><a name="298161"></a> </p>
<h4>8.5.3 元数据增加部分</h4>
<p><code>java.sql.Types </code>中增加了新的类型代码,即 <code>DISTINCT</code>。当
JDBC 支持这种数据类型时,由诸如 <code>DatabaseMetaData.getTypeInfo()</code>
和 <code>DatabaseMetaData.getColumns() </code>的方法返回该值。</p>
<p><a name="298169"></a>在架构表定义中使用 SQL DISTINCT
类型之前,必须将其类型定义为特定数据库架构的一部分。通过调用
<code>DatabaseMetaData.getUDTs()</code>
方法可以检索特定于架构的自定义类型(<code>DISTINCT </code>类型是其中的一种)的有关信息。例如,
</p>
<p><a name="298170"></a> </p>
<blockquote>
<pre><code>int[] types = {Types.DISTINCT};
ResultSet rs = dmd.getUDTs("catalog-name", "schema-name",
"%", types);
</code></pre>
</blockquote>
<p><a name="298174"></a></p>
<p><a name="298175"></a>将返回在 <code>catalog- name.schema-name </code>架构中<strong>定义的</strong>所有
SQL DISTINCT 类型的描述。如果驱动程序不支持 UDT 或者没有找到匹配的
UDT,则返回空结果集。</p>
<p><a name="298176"></a>每种类型描述都有以下各列: </p>
<p><a name="298202"></a> </p>
<table Border="0">
<tr>
<td><strong>TYPE_CAT </strong></td>
<td>String => 类型的目录(可以为空) </td>
</tr>
<tr>
<td><strong>TYPE_SCHEM </strong></td>
<td>String => 类型的架构(可以为空) </td>
</tr>
<tr>
<td><strong>TYPE_NAME </strong></td>
<td>String => 数据库类型名称 </td>
</tr>
<tr>
<td>JAVA_CLASS </td>
<td>String => Java 类或接口名称 </td>
</tr>
<tr>
<td><strong>DATA_TYPE </strong></td>
<td>short => <code>java.sql.Types</code> 中所定义的值,例如 DISTINCT </td>
</tr>
<tr>
<td><strong>REMARKS </strong></td>
<td>String => 对类型的解释性注释 </td>
</tr>
</table>
<table>
<tr>
<td></td>
</tr>
</table>
<p><a name="298204"></a> </p>
<p>以上的大多数列应该是无需加以解释的。上例中, <strong>TYPE_NAME</strong>
是赋予 DISTINCT 类型 (MONEY) 的 SQL 类型名。CREATE TABLE
语句指定这种类型的列时也使用该名称。</p>
<p><a name="298248"></a>当 <strong>DATA_TYPE</strong> 是 <code>Types.DISTINCT</code>
时,<strong>JAVA_CLASS </strong>列就包含全限定的 Java 类名。如果在这种
DISTINCT 类型的列上调用 <code>getObject()</code>,则将创建本类的实例。例如,在以上的
MONEY 情况下,JAVA_CLASS 将采用缺省设置 <code>java.math.BigDecimal</code>。JDBC
2.0 API 并不禁止驱动程序返回名为 JAVA_CLASS 的类的子类型。当使用
JAVA_CLASS 时, JAVA_CLASS 的值反映自定义类型映射。详细信息,参见第 <a
href="jdbc2.0.frame9.html#298134">9</a> 章。</p>
<p><a name="298166"></a> </p>
<h3>8.6 构化类型</h3>
<h4>8.6.1 检索结构化类型</h4>
<p>调用方法 <code>getObject()</code> 总能检索 SQL
结构化类型的数值。缺省情况下,<code>getObject()</code>
为结构化类型返回 <code>Struct</code> 类型的值。例如, </p>
<p><a name="298282"></a> </p>
<blockquote>
<pre>Struct struct = (Struct)rs.getObject(1);
</pre>
</blockquote>
<p><a name="298284"></a></p>
<p><a name="298285"></a>从结果集 <code>rs</code> 的当前行的第一列检索 <code>Struct</code>
值。<code>Struct</code> 接口所含的方法可以将结构化类型的属性当作 <code>java.lang.Object
</code>值的数组来检索。缺省情况下,JDBC 驱动程序在将指向 <code>Struct</code>
的引用返回给应用程序之前,应该先实现 <code>Struct</code>
的内容。同样,缺省情况下只要 Java 应用程序保留了指向 <code>Struct</code>
对象的引用,就认为 <code>Struct</code> 对象是有效的。JDBC
驱动程序可能会允许改变这些缺省值 — 例如,允许使用 SQL LOCATOR —
但是 JDBC 2.0 API 并没有规定具体的操作步骤。</p>
<p><a name="298302"></a> </p>
<h4>8.6.2 存储结构化类型</h4>
<p>可以调用 <code>PreparedStatement.setObject()</code> 方法来将 <code>Struct</code>
作为输入参数传递给预先准备好的语句。</p>
<p><a name="298162"></a> </p>
<h4>8.6.3 元数据增加部分</h4>
<code>
<p>java.sql.Types</code> 中增加了一种新的类型代码,即 <code>STRUCT</code>。当
JDBC 驱动程序支持结构化数据类型时,将通过诸如 <code>DatabaseMetaData.getTypeInfo()</code>
和 <code>DatabaseMetaData.getColumns() </code>的方法返回该值。</p>
<p><a name="298308"></a>在架构表定义中使用结构化的 SQL
类型之前,必须将结构化的 SQL
类型定义为特定数据库架构的一部分。通过调用 <code>DatabaseMetaData.getUDTs()</code>
方法可以检索特定于架构的自定义类型(<code>STRUCT </code>类型是其中的一种)的有关信息。例如,
</p>
<p><a name="298309"></a> </p>
<blockquote>
<pre><code>int[] types = {Types.STRUCT};
ResultSet rs = dmd.getUDTs("catalog-name", "schema-name",
"%", types);
</code></pre>
</blockquote>
<p><a name="298313"></a></p>
<p><a name="298314"></a>返回在 <code>catalog- name.schema-name </code>架构中<strong>定义的</strong>所有结构化
SQL 类型的描述。如果驱动程序不支持 UDT 或者找不到匹配的 UDT,则返回空结果集。有关
<code>getUDTs()</code> 所返回结果集的描述,参见 <a
href="jdbc2.0.frame8.html#298161">8.5.3</a> 一节。</p>
<p><a name="298344"></a>当 <code>getUDTs()</code> 所返回的 <strong>DATA_TYPE</strong>
是 <code>Types.STRUCT</code> 时,<strong>JAVA_CLASS </strong>列就包含 Java
类的全限定的 Java 类名。在这种 STRUCT 类型的列上调用 <code>getObject()</code>
时,由 JDBC 驱动程序生成该类的实例。这样,<strong>JAVA_CLASS</strong>
对于结构化类型会采用缺省设置 <code>java.sql.Struct </code>。第 <a
href="jdbc2.0.frame9.html#298134">9</a> 章讨论 Java
应用程序如何修改这个缺省值。在这里我们只指出一点:JDBC 2.0 API
不禁止驱动程序返回名为 JAVA_CLASS 的类的子类型。</p>
<p><br>
</p>
<hr>
<font size="-1"><a href="jdbc2.0.frame.html">
<p>目录</a> | <a href="jdbc2.0.frame7.html">上一页</a> | <a
href="jdbc2.0.frame9.html">下一页</a> </font></p>
<hr>
<address>
<a href="mailto:jdbc@eng.sun.com">jdbc@eng.sun.com</a> 或 <a
href="mailto:jdbc-business@eng.sun.com">jdbc-business@eng.sun.com</a>
</address>
<a href="../../../relnotes/SMICopyright.html"><font size="-1"><i>
<p>版权所有 © 1996, 1997 Sun Microsystems, Inc. 保留所有权利</i></font>。</a><!-- HTML generated by Suzette Pelouch on June 09, 1998 -->
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -