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

📄 jdbc2.0.frame10.html

📁 JDBC的学习文档
💻 HTML
字号:
<!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.frame9.html">上一页</a> | <a href="jdbc2.0.frame11.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="288813"></a> </p>

<h2>10 其它新功能</h2>

<p>本章描述了 JDBC 2.0 API 中的其它变化。</p>

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

<h3>10.1 java.sql.ResultSet 的变化</h3>
<code>

<p>ResultSet.getBigDecimal()</code> 方法的新增版本可以返回全精度数值。</p>

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

<h3>10.2 java.sql.ResultSetMetaData 的变化</h3>
<code>

<p>ResultSetMetaData.getColumnType()</code> 方法现在可以返回新的 SQL 
类型代码: <code>STRUCT</code>、<code>DISTINCT</code>、<code>BLOB</code> 
等。它通常返回 <code>STRUCT</code> 和 <code>DISTINCT</code> 
类型代码来代表结构化数值和 distinct 
数值,而不管使用的是缺省还是自定义类型映射方式。</p>

<p><a name="299321"></a><code>ResultSetMetaData.getColumnTypeName() </code>方法应该为新 
SQL 类型的以下值。</p>

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

<table Border="0">
  <tr>
    <td>列类型 </td>
    <td>&nbsp;&nbsp;&nbsp; 列类型名 </td>
  </tr>
  <tr>
    <td>JAVA_OBJECT </td>
    <td>Java 类型的 SQL 名称 </td>
  </tr>
  <tr>
    <td>DISTINCT </td>
    <td>distinct 类型的 SQL 名称 </td>
  </tr>
  <tr>
    <td>STRUCT </td>
    <td>结构化类型的 SQL 名称 </td>
  </tr>
  <tr>
    <td>ARRAY </td>
    <td>与数据源相关的类型名称 </td>
  </tr>
  <tr>
    <td>BLOB </td>
    <td>与数据源相关的类型名称 </td>
  </tr>
  <tr>
    <td>CLOB </td>
    <td>与数据源相关的类型名称 </td>
  </tr>
  <tr>
    <td>REF </td>
    <td>与数据源相关的类型名称 </td>
  </tr>
</table>

<table>
  <tr>
    <td></td>
  </tr>
</table>

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

<p><a name="299320"></a>我们新增了 <code>ResultSetMetaData</code>.<code>getColumnClassName() 
</code>方法,用于返回 Java 类的全限定名(如果调用 ResultSet.getObject() 
方法来检索列中的数值,则生成该 Java 
类的实例)。详细信息,参见单独的 API 文档。</p>

<p>当类型代码为 STRUCT、DISTINCT 或 JAVA_OBJECT 时,<code>ResultSetMetaData.getColumnTypeName()</code> 
方法返回 SQL 类型全限定名。</p>

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

<h3>10.3 DatabaseMetaData 的变化</h3>
<code>

<p>DatabaseMetaData.getColumns()</code> 方法现在可以返回以下的新 SQL3 
类型的 DATA_TYPE 值: BLOB、CLOB 等等。<code>DatabaseMetaData.getColumns() </code>方法所返回的类型名称与第 
<a href="jdbc2.0.frame10.html#299317">10.2</a> 节中所列出的 SQL3 
数据类型的类型名称一样。</p>

<p>新增了方法 <code>DatabasemetaData.getConnection()</code>,用于返回生成元数据对象的 
<code>Connection</code> 对象。</p>

<p><a name="299512"></a>新增了方法 <code>DatabasemetaData.getUDTs()</code>。详细信息,参见单独的 
API 文档。</p>

<p><a name="299516"></a>新增了支持新的 <code>ResultSet </code>和批处理更新功能的方法: 
<code>supportsResultSetConcurrency() </code>、 <code>supportsBatchUpdates()</code> 
等。详细信息,参见单独的 API 文档。</p>

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

<h3>10.4 java.sql.DriverManager 的变化</h3>

<p>新增了 <code>DriverManager.setLogWriter()</code> 方法,该方法将 <code>java.io.PrintWriter</code> 
对象作为输入参数。新增的 <code>DriverManager.getLogWriter()</code> 
方法返回 <code>PrintWriter</code> 对象。不鼓励使用 <code>set/getLogStream()</code> 
方法。</p>

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

<h3>10.5 日期、时间和时间戳</h3>

<p>JDBC API 沿循了 Java 
平台的日期和时间表示方法,即以相对于格林尼治标准时间 1970 年 1 
月 1 日 00:00:00 
的毫秒值来表示日期和时间。因为大多数数据库不支持时区的概念,所以 
JDBC 2.0 API 新增了几种方法,允许 JDBC 驱动程序利用 <code>Calendar</code> 
获得/设置某一特定时区的 <code>Date</code>、<code>Time</code> 以及 <code>Timestamp</code> 
值。例如, </p>

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

<blockquote>
  <pre>ResultSet rs;
...
Date date1 = rs.getDate(1);

</pre>
</blockquote>

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

<p>返回 <code>Date</code> 对象,该对象所含的毫秒值表示特定日期(如 
1999 年 1 月3 日)及缺省时区中的标准时间 00:00:00。在缺省时区中,Date 
的时间部分被设置为零,这是因为 SQL DATE 
值没有时间部分。由于没有为 <code>getDate() </code>显式地提供 <code>Calendar</code>,所以 
JDBC 驱动程序在内部利用缺省时区(实际上是缺省 <code>Calendar</code>)来创建正确的毫秒值(假设基本数据库没有存储时区信息)。</p>

<p><a name="301748"></a>下例检索 GMT(格林尼治标准时间)日期值。</p>

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

<blockquote>
  <pre>ResultSet rs;
...

TimeZone.setDefault(TimeZone.getTimeZone(&quot;GMT&quot;));
Calendar cal = Calendar.getInstance();
Date date2 = rs.getDate(1, cal);
</pre>
</blockquote>

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

<p><a name="301798"></a>上例中,<code>Calendar</code> 将被显式地传给 <code>getDate()</code>,以告知 
JDBC 驱动程序如何计算正确的毫秒值。请注意:因为 JDBC 
驱动程序在缺省情况下会采用缺省时区,所以只需更改一下缺省时区(不必显式地传递 
<code>Calendar</code>)即可获得同样的结果。</p>

<p><a name="301800"></a>请注意:如果假设缺省时区不是 GMT,则以上所创建的两个 
<code>Date</code> 对象并不等同,即使它们表示的是“同一”日期。</p>

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

<blockquote>
  <pre>if (date1.equals(date2))
	// 不可能执行到此

</pre>
</blockquote>

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

<p><a name="301809"></a>这是因为每种 Java 语言的 <code>Date</code> 
对象实际上只是包含了标准化的毫秒时间值,而这些毫秒值在时区之间是不同的。如果应用程序要比较不同时区中的日期,则首先应该将日期转换到 
<code>Calendar</code>。</p>

<p><a name="301813"></a>应用程序应该利用 <code>Calendar</code> 来创建 <code>Date</code> 
对象。应用程序在使用 <code>Calendar </code>时,应该负责将所需日期中的时间指定为 
00:00:00(因为 JDBC 采用了这种约定)。另外,应用程序在创建 <code>Time</code> 
值时,必须将日期 January 1, 1970 指定给为 <code>Time</code> 创建毫秒值的 
<code>Calendar</code>,因为这是 JDBC 对时间的约定。</p>

<p><br>
</p>

<hr>
<font size="-1"><a href="jdbc2.0.frame.html">

<p>目录</a> | <a href="jdbc2.0.frame9.html">上一页</a> | <a
href="jdbc2.0.frame11.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>版权所有 &copy; 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 + -