⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdbc2.0.frame8.html

📁 JDBC入门中文文档
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=gb2312">
<title></title>
</head>

<body bgcolor="#ffffff">

<table width="100%">
  <tr>
    <td><font size="-1"><a href="jdbc2.0.frame.html">目录</a> | <a
    href="jdbc2.0.frame7.html">上一页</a> | <a href="jdbc2.0.frame9.html">下一页</a> </font></td>
    <td align="right"><i>JDBC<sup><font size="-2">TM</font></sup> 指南:入门</i></td>
  </tr>
</table>

<hr>

<p><br>
<a name="297135"></a> </p>

<h2>8 新的 SQL 类型</h2>

<p>以下两章讨论了 JDBC 2.0 API 的附加部分,它们可以使 Java 
应用程序能访问新的 SQL 
数据类型,例如二进制大型对象和结构化类型。不支持新的 SQL 
类型的 JDBC 驱动程序不需要实现这两章中所述的方法和接口。</p>

<p><a name="293160"></a> </p>

<h3>8.1&nbsp; SQL 类型的分类</h3>

<p>通常将 ANSI/ISO SQL 标准的下一个版本称为 <em>SQL3</em>。详细说明该标准的工作文档称为 
<em>SQL3 草案</em>。该草案现在正处于标准化过程的阶段,不会有较大的增加或变化 
— 只作较小的变化和修改。SQL3 
中所含的数据类型的基本种类不会在标准化过程的最后阶段发生变化。</p>

<p><a name="297011"></a>JDBC 2.0 API 融入了新 SQL3 
类型的模型,其中只包括了在 Java 
应用程序和数据库之间交换数据所需的属性。在本草案成为正式标准之前,即使改变新 
SQL3 类型的语法和服务器端语义的部分细节,也不应该影响 JDBC 2.0 API。</p>

<p>SQL3 草案定义了以下数据类型: 

<ul>
  <p><a name="288854"></a></p>
  <li>SQL2 内嵌类型 — 熟悉的 SQL“列类型” <br>
    <br>
    <ul>
      <p><a name="288856"></a></p>
      <li>CHAR <br>
        <br>
        <a name="297071"></a> </li>
      <li>FLOAT <br>
        <br>
        <a name="288858"></a> </li>
      <li>DATE <br>
        <br>
        <a name="288859"></a> </li>
      <li>等等。<br>
        <br>
      </li>
    </ul>
    <p><a name="300249"></a> </p>
  </li>
  <li>新的内嵌类型 — SQL3 新增的类型 <br>
    <br>
    <ul>
      <p><a name="300250"></a></p>
      <li>BLOB- Binary Large OBject(二进制大型对象) <br>
        <br>
        <a name="300251"></a> </li>
      <li>CLOB- Character Large OBject(字符大型对象) <br>
        <br>
      </li>
    </ul>
    <p><a name="297069"></a> </p>
  </li>
  <li>结构化类型,例如: <br>
    <br>
    <ul>
      <p><a name="297070"></a></p>
      <li>CREATE TYPE PLANE_POINT (X FLOAT, Y FLOAT) <br>
        <br>
      </li>
    </ul>
    <p><a name="288860"></a> </p>
  </li>
  <li>Distinct 类型 — 基于内嵌类型的表示,例如: <br>
    <br>
    <ul>
      <p><a name="297022"></a></p>
      <li>CREATE TYPE MONEY AS NUMERIC(10,2) <br>
        <br>
      </li>
    </ul>
    <p><a name="288869"></a> </p>
  </li>
  <li>构造的类型 — 基于给定的基准类型:<br>
    <br>
    <ul>
      <p><a name="288871"></a></p>
      <li>REF(structured-type) — 指定包含结构化类型实例的行 <br>
        <br>
        <a name="300162"></a> </li>
      <li>base-type ARRAY[n] — 具有 n 个基准类型元素的数组 <br>
        <br>
      </li>
    </ul>
    <p><a name="300161"></a> </p>
  </li>
  <li>Locator types — 指定驻留在服务器上的数据 <br>
    <br>
    <ul>
      <p><a name="288881"></a></p>
      <li>LOCATOR(structured-type) — 指向服务器中的结构化实例的定位符 <br>
        <br>
        <a name="288883"></a> </li>
      <li>LOCATOR(array) —指向服务器中的数组的定位符 <br>
        <br>
        <a name="297826"></a> </li>
      <li>LOCATOR(blob) — 指向服务器中的二进制大型对象的定位符 <br>
        <br>
        <a name="297827"></a> </li>
      <li>LOCATOR(clob) — 指向服务器中的字符大型对象的定位符 <br>
        <br>
      </li>
    </ul>
  </li>
</ul>

<p><a name="297058"></a></p>

<p><a name="297830"></a><code>REF</code> 
值仍表示驻留在数据库中的结构化类型的实例。<code>LOCATOR</code> 
只存在于客户机环境下, 
而且是指向驻留在数据库服务器上的数据的瞬态逻辑指针。定位符通常用来引用因太大而不能在客户机上实现的数据,例如图像和音频。在 
SQL 级中所定义的操作符可以检索定位符所表示的随机存取数据块。</p>

<p><a name="297868"></a>本章的其余部分讨论了 JDBC 2.0 API 
所提供的缺省机制,可用来访问以上所提及的每种新 SQL 类型。JDBC 
2.0 API 还提供了一种方法,可以自定义从 SQL distinct 和结构化类型到 
Java 类的映射方式。在第 <a href="jdbc2.0.frame9.html#298134">9</a> 
章中讨论了这种机制。</p>

<p><a name="297904"></a> </p>

<h3>8.2 Blob 和 clob</h3>

<h4>8.2.1 检索 blob 和 clob</h4>

<p>对二进制大型对象 (blob) 和字符大型对象 (clob) 
数据类型的处理类似于现有的内嵌 JDBC 类型。通过调用出现在 <code>ResultSet</code> 
和 <code>CallableStatement</code> 接口上的 <code>getBlob()</code> 和 <code>getClob()</code> 
方法可以检索这些类型的值。例如, </p>

<p><a name="297894"></a> </p>

<blockquote>
  <pre>Blob blob = rs.getBlob(1);
Clob clob = rs.getClob(2);


</pre>
</blockquote>

<p><a name="297897"></a></p>

<p>从结果集的第一列检索 blob 值而从第二列检索 clob 值。<code>Blob</code> 
接口所含的操作可以返回 blob 的长度、blob 中特定的一段字节等。<code>Clob</code> 
接口所含的相应操作是基于字符的。详细信息,参见附带的 API 
文档。</p>

<p>JDBC 应用程序并不直接处理在 SQL 中定义的 LOCATOR(blob) 和 LOCATOR(clob) 
类型。缺省情况下,JDBC 驱动程序应该使用适当的 locator(定位符)类型来实现 
<code>Blob</code> 和 <code>Clob</code> 接口。同样,在缺省情况下,<code>Blob</code> 
和 <code>Clob</code> 对象只是在创建它们的<strong>事务处理</strong>过程中保持有效。JDBC 
驱动程序可能允许改变这些缺省值。例如,可以将 <code>Blob</code> 和 <code>Clob</code> 
对象的寿命更改为在会话作用域内。然而,JDBC 2.0 API 
并没有规定具体的操作步骤。</p>

<p><a name="297911"></a> </p>

<h4>8.2.2 存储 blob 和 clob</h4>

<p>通过分别调用 <code>setBlob()</code> 和 <code>setClob()</code> 
方法,用户即可象对待其它 JDBC 数据类型一样将 <code>Blob</code> 或 <code>Clob</code> 
值作为输入参数传给 <code>PreparedStatement</code> 对象。可以使用 <code>setBinaryStream()</code> 
和 <code>setObject()</code> 方法来将流值作为 blob 输入。可以使用 <code>setAsciiStream()</code>、<code>setUnicodeStream()</code> 
和 <code>setObject()</code> 方法来将流值作为 clob 输入。</p>

<p><a name="297913"></a> </p>

<h4>8.2.3 元数据增加部分</h4>

<p>在 <code>java.sql.Types </code>中增加了两种新的类型代码,即 <code>BLOB</code> 
和 <code>CLOB </code>。当 JDBC 支持这两种数据类型时,由诸如 <code>DatabaseMetaData.getTypeInfo()</code> 
和 <code>DatabaseMetaData.getColumns() </code>的方法返回这些值。</p>

<p><a name="297937"></a> </p>

<h3>8.3 数组</h3>

<h4>8.3.1 检索数组</h4>

<p>通过调用 <code>ResultSet </code>和 <code>CallableStatement</code> 接口的 <code>getArray()</code> 
方法可以检索 SQL 类型数组的数据。例如, </p>

<p><a name="297945"></a> </p>

<blockquote>
  <pre>Array a = rs.getArray(1);


</pre>
</blockquote>

<p><a name="298046"></a></p>

<p>从结果集的第一列检索 <code>Array</code> 值。缺省情况下,JDBC 
驱动程序应该在内部使用 SQL LOCATOR(array) 来实现 <code>Array</code> 
接口。同样,缺省情况下,<code>Array </code>对象只是在创建它的<strong>事务处理</strong>过程中保持有效。对于 
<code>Blob</code> 和 <code>Clob</code> 
类型来说,可以改变这些缺省值,但是 JDBC 2.0 API 
没有规定具体的操作步骤。</p>

<p><a name="297952"></a><code>Array</code> 
接口提供了几种方法可以将数组内容作为已实现的 Java 数组或 <code>ResultSet 
</code>对象返回给客户机。这些方法分别为 <code>getArray() </code>和 <code>getResultSet()</code>。详细信息,参见单独的 
API 文档。</p>

<p><a name="297960"></a> </p>

<h4>8.3.2 存储数组</h4>

<p>可以调用 <code>PreparedStatement.setArray()</code> 方法将 <code>Array</code> 
值作为输入参数传递给预先准备好的语句。通过调用 <code>PreparedSatement.setObject()</code> 
可以将 Java 编程语言数组作为输入参数进行传递。</p>

<p><a name="297950"></a> </p>

<h4>8.3.3 元数据增加部分</h4>

<p>在 <code>java.sql.Types </code>中增加了新的类型代码,即 <code>ARRAY</code>。当 
JDBC 支持 <code>Array</code> 数据类型时,由诸如 <code>DatabaseMetaData.getTypeInfo()</code> 
和 <code>DatabaseMetaData.getColumns() </code>的方法返回该值。</p>

<p><a name="297962"></a> </p>

<h3>8.4 Ref</h3>

<h4>8.4.1 检索 ref</h4>

<p>通过调用 <code>ResultSet</code> 和 <code>CallableStatement</code> 接口的 <code>getRef()</code> 
方法可以检索 SQL 引用。例如, </p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -