?? jdbc2.0.frame10.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> 列類型名 </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("GMT"));
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>版權所有 © 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 + -