?? jdbc2.0.frame10.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<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> 方法的新增版本可以返回全精度數(shù)值。</p>
<p><a name="299317"></a> </p>
<h3>10.2 java.sql.ResultSetMetaData 的變化</h3>
<code>
<p>ResultSetMetaData.getColumnType()</code> 方法現(xiàn)在可以返回新的 SQL
類型代碼: <code>STRUCT</code>、<code>DISTINCT</code>、<code>BLOB</code>
等。它通常返回 <code>STRUCT</code> 和 <code>DISTINCT</code>
類型代碼來代表結(jié)構(gòu)化數(shù)值和 distinct
數(shù)值,而不管使用的是缺省還是自定義類型映射方式。</p>
<p><a name="299321"></a><code>ResultSetMetaData.getColumnTypeName() </code>方法應(yīng)該為新
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>結(jié)構(gòu)化類型的 SQL 名稱 </td>
</tr>
<tr>
<td>ARRAY </td>
<td>與數(shù)據(jù)源相關(guān)的類型名稱 </td>
</tr>
<tr>
<td>BLOB </td>
<td>與數(shù)據(jù)源相關(guān)的類型名稱 </td>
</tr>
<tr>
<td>CLOB </td>
<td>與數(shù)據(jù)源相關(guān)的類型名稱 </td>
</tr>
<tr>
<td>REF </td>
<td>與數(shù)據(jù)源相關(guān)的類型名稱 </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 類的全限定名(如果調(diào)用 ResultSet.getObject()
方法來檢索列中的數(shù)值,則生成該 Java
類的實例)。詳細(xì)信息,參見單獨(dú)的 API 文檔。</p>
<p>當(dāng)類型代碼為 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> 方法現(xiàn)在可以返回以下的新 SQL3
類型的 DATA_TYPE 值: BLOB、CLOB 等等。<code>DatabaseMetaData.getColumns() </code>方法所返回的類型名稱與第
<a href="jdbc2.0.frame10.html#299317">10.2</a> 節(jié)中所列出的 SQL3
數(shù)據(jù)類型的類型名稱一樣。</p>
<p>新增了方法 <code>DatabasemetaData.getConnection()</code>,用于返回生成元數(shù)據(jù)對象的
<code>Connection</code> 對象。</p>
<p><a name="299512"></a>新增了方法 <code>DatabasemetaData.getUDTs()</code>。詳細(xì)信息,參見單獨(dú)的
API 文檔。</p>
<p><a name="299516"></a>新增了支持新的 <code>ResultSet </code>和批處理更新功能的方法:
<code>supportsResultSetConcurrency() </code>、 <code>supportsBatchUpdates()</code>
等。詳細(xì)信息,參見單獨(dú)的 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>
對象作為輸入?yún)?shù)。新增的 <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
平臺的日期和時間表示方法,即以相對于格林尼治標(biāo)準(zhǔn)時間 1970 年 1
月 1 日 00:00:00
的毫秒值來表示日期和時間。因為大多數(shù)數(shù)據(jù)庫不支持時區(qū)的概念,所以
JDBC 2.0 API 新增了幾種方法,允許 JDBC 驅(qū)動程序利用 <code>Calendar</code>
獲得/設(shè)置某一特定時區(qū)的 <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 日)及缺省時區(qū)中的標(biāo)準(zhǔn)時間 00:00:00。在缺省時區(qū)中,Date
的時間部分被設(shè)置為零,這是因為 SQL DATE
值沒有時間部分。由于沒有為 <code>getDate() </code>顯式地提供 <code>Calendar</code>,所以
JDBC 驅(qū)動程序在內(nèi)部利用缺省時區(qū)(實際上是缺省 <code>Calendar</code>)來創(chuàng)建正確的毫秒值(假設(shè)基本數(shù)據(jù)庫沒有存儲時區(qū)信息)。</p>
<p><a name="301748"></a>下例檢索 GMT(格林尼治標(biāo)準(zhǔn)時間)日期值。</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 驅(qū)動程序如何計算正確的毫秒值。請注意:因為 JDBC
驅(qū)動程序在缺省情況下會采用缺省時區(qū),所以只需更改一下缺省時區(qū)(不必顯式地傳遞
<code>Calendar</code>)即可獲得同樣的結(jié)果。</p>
<p><a name="301800"></a>請注意:如果假設(shè)缺省時區(qū)不是 GMT,則以上所創(chuàng)建的兩個
<code>Date</code> 對象并不等同,即使它們表示的是“同一”日期。</p>
<p><a name="301801"></a> </p>
<blockquote>
<pre>if (date1.equals(date2))
// 不可能執(zhí)行到此
</pre>
</blockquote>
<p><a name="301806"></a></p>
<p><a name="301809"></a>這是因為每種 Java 語言的 <code>Date</code>
對象實際上只是包含了標(biāo)準(zhǔn)化的毫秒時間值,而這些毫秒值在時區(qū)之間是不同的。如果應(yīng)用程序要比較不同時區(qū)中的日期,則首先應(yīng)該將日期轉(zhuǎn)換到
<code>Calendar</code>。</p>
<p><a name="301813"></a>應(yīng)用程序應(yīng)該利用 <code>Calendar</code> 來創(chuàng)建 <code>Date</code>
對象。應(yīng)用程序在使用 <code>Calendar </code>時,應(yīng)該負(fù)責(zé)將所需日期中的時間指定為
00:00:00(因為 JDBC 采用了這種約定)。另外,應(yīng)用程序在創(chuàng)建 <code>Time</code>
值時,必須將日期 January 1, 1970 指定給為 <code>Time</code> 創(chuàng)建毫秒值的
<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>版權(quán)所有 © 1996, 1997 Sun Microsystems, Inc. 保留所有權(quán)利</i></font>。</a><!-- HTML generated by Suzette Pelouch on June 09, 1998 -->
</p>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
減小字號
Ctrl + -