程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JDBC常見問題 -來自sun論壇

JDBC常見問題 -來自sun論壇

編輯:關於JAVA

JDBC常見問題

目錄

什麼是 JDBC 3.0 API?

JDBC-ODBC Bridge 是否支持 JDBC 3.0 API 中的新特性?

JDBC-ODBC Bridge 是否可以與 applet 一起使用?

我怎樣開始調試與 JDBC API 有關的問題?

我如何可以使用 JDBC API 通過網絡訪問像 Microsoft Access 這樣的桌面數據庫?

有哪些可用的支持 JDBC 技術的驅動程序?

有哪些可用的 JDBC API 文檔?

是否有不可與 JDBC-ODBC Bridge 一起工作的 ODBC 驅動程序?

什麼會引起“No suitable driver”(沒有合適的驅動程序)錯誤?

為什麼不能找到 Java.sql.DriverManager 類?

我如何一次檢索一整行數據,而不針對每一列都調用一次 ResultSet.getXXX 方法?

為什麼 ODBC 驅動程序管理器會返回”Data source name not found and no default driver specifIEd Vendor: 0”(數據源名稱沒有找到並且沒有默認的驅動程序指定供應商:0)?

是否所有需要的 JDBC 驅動程序都將創建到 JDK 的數據庫部分的連接?

JDBC-ODBC Bridge 是多線程的嗎?

JDBC-ODBC Bridge 是否在每個連接中支持多個並發的打開語句?

當 next 方法工作時,我為什麼不能調用 ResultSet 方法 afterLast 和 beforeFirst?

我如何可以檢索一個 String 或其他對象類型,而不用每次創建一個新對象?

在 JDBC API 中有一個方法 getColumnCount。是否有類似的方法來查找結果集中的行數?

我想下載 Java 2 SDK, Standard Edition (以前的 JDK 1.2)的 JDBC-ODBC Bridge。我是 JDBC API 的初學者,我想從 Bridge 開始。我該怎麼做?

如果我使用 JDBC API,我有必要使用 ODBC 支配(ODBC underneath)嗎?

一旦有了 Sun 的 Java 2 SDK, Standard Edition,連接數據庫還需要做其他什麼嗎?

1. 什麼是 JDBC 3.0 API?

JDBC 3.0 API 是 JDBC API 的最後更新。它包含了許多特性,包括可滾動的結果集和 SQL:1999 數據類型。

回到頁首

2. JDBC-ODBC Bridge 是否支持 JDBC 3.0 API 中的新特性?

JDBC-ODBC Bridge 提供了 JDBC 3.0 API 的有限子集。

回到頁首

3. JDBC-ODBC Bridge 是否可以與 applet 一起使用?

運行於浏覽器(比如 Netscape Navigator)中的不受信任的 applet 不允許使用 JDBC-ODBC Bridge。JDBC-ODBC Bridge 不允許不受信任的代碼出於安全方面的考慮而調用它。這是好的方面,因為它表明由浏覽器下載的不受信任 applet 不會通過調用 ODBC 來回避 Java 安全。 記住 ODBC 是本機代碼,所以一旦調用 ODBC,Java 編程語言就不能保證安全沖突不會發生。另一方面,Pure Java JDBC 驅動程序與 applet 一起工作得很好。它們是完全可以下載的,而且不要求任何的客戶端配置。

最後,我想提一下的是,可以將 JDBC-ODBC Bridge 與 applet 一起使用,因為 applet 浏覽器假定 applet 是受信任的,因此,applet 會在 applet 浏覽器中運行。通常關閉 applet 安全是危險的,但在某些經過控制的場合,比如對於只在安全 Intranet 環境中使用的 applet,它可能是合適的。記住如果您選擇這個選項,就會碰到警告,一有可能避免安全問題,就使用全 Java (all-Java) JDBC 驅動程序。

回到頁首

4. 我怎樣開始調試與 JDBC API 有關的問題?

找出 JDBC 調用正在做什麼的一個好的辦法是啟用 JDBC 跟蹤。JDBC 跟蹤包含活動的詳細列表,這些活動發生在與 JDBC 操作有關的系統中。

如果您使用 DriverManager 工具包來創建數據庫連接,就使用 DriverManager.setLogWriter 方法來啟用 JDBC 操作的跟蹤。如果您使用 DataSource 對象來獲取連接,就使用 DataSource.setLogWriter 方法來啟用跟蹤。(對於集中連接,您使用 ConnectionPoolDataSource.setLogWriter 方法;對於參與分布式事務的連接,使用 XADataSource.setLogWriter 方法。)

回到頁首

5. 我如何可以使用 JDBC API 通過網絡訪問像 Microsoft Access 這樣的桌面數據庫?

目前多數桌面數據庫要求使用 ODBC 支配的 JDBC 解決方案。這是因為這些數據庫產品的供應商還沒有實現全 Java JDBC 驅動程序。

最佳辦法是使用支持想用的 ODBC 和數據庫的商業 JDBC 驅動程序。參見 JDBC 驅動程序頁面,獲取可用的 JDBC 驅動程序列表。

來自 Sun Java Software 的 JDBC-ODBC Bridge 沒有單獨提供對桌面數據庫的訪問。JDBC-ODBC Bridge 將 ODBC 作為本地 DLL 加載,而且針對桌面數據庫(如 Access)的典型 ODBC 驅動器不在網絡上。不過,JDBC-ODBC Bridge 可以與 RMI-JDBC Bridge 一起使用,以便通過網絡訪問像 Access 這樣的數據庫。 這種 RMI-JDBC-ODBC 解決方案是免費的。

回到頁首

6. 有哪些可用的支持 JDBC 技術的驅動程序?

參閱 有關支持 JDBC 技術驅動程序的 Web 頁,獲取當前可用的驅動程序列表。

回到頁首

7. 有哪些可用的 JDBC API 文檔?

參閱 JDBC 技術主頁,該頁面中有一些鏈接指向有關 JDBC 技術的信息。這個頁面鏈接到有關特性和優點的信息、一系列新特性、有關入門介紹的一節、在線教程和有關驅動程序要求的一節等信息,它還鏈接到規范和 Javadoc 文檔。

回到頁首

8. 是否有不可與 JDBC-ODBC Bridge 一起工作的 ODBC 驅動程序?

多數 ODBC 2.0 驅動程序應當與 Bridge 一起工作。由於 ODBC 驅動程序之間在功能上有一些區別,因此 Bridge 的功能可能會受到影響。Bridge 與流行的 PC 數據庫一起工作,比如 Microsoft Access 和 FoxPro。

回到頁首

9. 什麼會引起“No suitable driver”(沒有合適的驅動程序)錯誤?

在調用 DriverManager.getConnection 方法期間,經常會出現“No suitable driver”的錯誤。 原因可能是在調用 getConnection 方法之前,加載合適的 JDBC 驅動程序失敗,或者它可能正在指定一個非法的 JDBC URL——一個不被 JDBC 驅動程序識別的 URL。最好的辦法是檢查 JDBC 驅動程序的文檔或聯系您的 JDBC 驅動程序供應商,前提是您懷疑正在指定不被 JDBC 驅動程序識別的 URL。

此外,當您正在使用 JDBC-ODBC Bridge 時,如果不能加載 Bridge 所需的一個或多個共享庫,這種錯誤就可能發生。如果您認為這是原因所在,就檢查您的配置,以確保 Bridge 能夠訪問共享庫。

回到頁首

10. 為什麼不能找到 Java.sql.DriverManager 類?

這個問題可能是由於在支持 JDK 1.0.2 的浏覽器(如 Netscape Navigator 3.0)中運行 JDBC applet 引起的。JDK 1.0.2 不包含 JDBC API,因此在浏覽器中運行的 Java 虛擬機通常不能找到 DriverManager 類。

這裡有一個解決方案,它不要求在 Web 客戶端上做任何附加的配置。記住,出於安全方面的考慮,java.* 包 中的類不能由多數浏覽器下載。因此,許多全 Java 驅動程序供應商提供了不同版本的 java.sql.*類,並將它們命名為 jdbc.sql.*,而且也一起提供了使用了這些修改後的類的驅動程序版本。如果在 applet 代碼中導入 jdbc.sql.* 而不是 Java.sql.*,並在 applet 的基本代碼 (codebase) 中添加由 JDBC 驅動程序供應商提供的 jdbc.sql.* 類,那麼 applet 所需的所有 JDBC 類就可以在運行時由浏覽器下載,包括 DriverManager 類。

這個解決方案將使得 applet 能夠在支持 JDK 1.0.2 的任何客戶端浏覽器中工作。applet 也可以在支持 JDK 1.1 的浏覽器中工作,不過出於性能方面的考慮,可能想切換到 JDK 1.1 類。也請記住,這裡描繪的解決方案只是一個例子,其他的解決方案也是可能的。

回到頁首

11. 我如何一次檢索一整行數據,而不是針對每一列都調用一次 ResultSet.getXXX 方法?

ResultSet.getXXX 方法是從 ResultSet 對象中檢索數據的惟一方法,這表明必須對行中的每一列發出一個調用。然而這不大可能是導致性能問題的原因所在,因為很難看到,在任何場合中,如何提取一列,而不用至少開銷一次函數調用。我們歡迎開發人員提供有關本主題的信息。

回到頁首

12. 為什麼 ODBC 驅動程序管理器會返回“Data source name not found and no default driver specifIEd Vendor: 0”(數據源名稱沒有找到並且沒有默認的驅動程序指定供應商:0)?

在嘗試使用 Bridge 連接到數據庫期間,這種類型的錯誤就可能發生。首先,請注意錯誤是來自 ODBC 驅動程序管理器。這表明 Bridge——普通的 ODBC 客戶端——已經成功調用 ODBC,因此問題不是由於本地庫不存在而導致的。在這種情形下,它表明錯誤是由於如下事實而導致的:需要在客戶計算機上配置 ODBC DSN(數據源名稱)。開發人員經常會忘記這樣做,認為 Bridge 應該會找到遠程服務器計算機上配置的 DSN。

回到頁首

13. 是否所有需要的 JDBC 驅動程序都將創建到 JDK 的數據庫部分的連接?

不是。除了 JDBC-ODBC Bridge 外,沒有任何的支持 JDBC 技術的驅動程序與 JDK 1.1.x 或 Java 2 Platform 版本捆綁在一起。因此,開發人員需要獲取驅動程序並安裝它,然後才可以連接到數據庫。我們正在考慮在將來捆綁支持 JDBC 技術的驅動程序。

回到頁首

14. JDBC-ODBC Bridge 是多線程的嗎?

不是。JDBC-ODBC Bridge 不支持來自不同線程的並發訪問。JDBC-ODBC Bridge 使用同步方法來序列化它對 ODBC 的所有調用。多線程 Java 程序可以使用 Bridge,但它們不能得到多線程的優點。此外,死鎖可能在數據庫持有的鎖和 Bridge 使用的信號 (semaphore) 之間發生。我們正考慮將來刪除同步方法。原來添加它們的目的是,使得對於編寫使用單線程 ODBC 驅動程序的 Java 程序的人員來說,事情變得簡單了。

回到頁首

15. JDBC-ODBC Bridge 是否在每個連接中支持多個並發的打開語句?

不是。當使用 JDBC-ODBC Bridge 時,每個連接只能打開一個 Statement 對象。

回到頁首

16. 當 next 方法工作時,我為什麼不能調用 ResultSet 方法 afterLast 和 beforeFirst?

您可能正在使用針對 JDBC 1.0 API 實現的驅動程序。需要升級到 JDBC 2.0 驅動程序,它實現了可滾動結果集。同時保證了代碼已經創建可滾動結果集,並且正在使用的 DBMS 支持它們。

回到頁首

17. 我如何可以檢索 String 或其他對象類型,而不用每次創建一個新的對象?

不必要地創建潛在的大量對象(數百萬),並對它們進行垃圾收集處理,這才可能真正影響到性能。下面這種方法可能會比較好:使用 JDBC API ,而不是總分配新的對象來檢索像字符串這樣的數據。

我們正在研究這個主題,確定在某些地方是否應該改善 JDBC API。以後可能會有這方面的信息。此外,如果您有關於這個問題的任何評論,也請發送給我們。

回到頁首

18. 在 JDBC API 中有一個方法 getColumnCount。是否有類似的方法來查找結果集中的行數?

沒有,但查找行數是容易的。如果您正在使用可滾動結果集 rs,就可以調用 rs.last,然後調用 rs.getRow 來查找 rs 中的行數。如果結果集是不可滾動的,也可以通過在結果集中迭代來計算行數,或者提交一個查詢,在 SELECT 子句中加上 COUNT 列來取得行數。

回到頁首

19. 我想下載Java 2 SDK, Standard Edition (以前的 JDK 1.2)的 JDBC-ODBC Bridge。我是 JDBC API 的初學者,我想從 Bridge 開始。我該怎麼做?

JDBC-ODBC Bridge 與 Java 2 SDK, Standard Edition 捆綁在一起,因此沒有必要另外下載它。

回到頁首

20. 如果我使用 JDBC API,我有必要使用 ODBC 支配(ODBC underneath)嗎?

沒有必要,這只是許多可能的解決方案中的一種。我們推薦使用純支持 Java JDBC 技術的驅動程序(類型 3 或 4),以便取得 Java 編程語言和 JDBC API 的所有優點。

回到頁首

21. 一旦有了 Sun 的 Java 2 SDK, Standard Edition,連接數據庫還需要做其他什麼嗎?

仍需要獲得並安裝支持 JDBC 技術的驅動程序,並且它要支持正在使用的數據庫。有來自各種資源的許多驅動程序。也可以試著使用 JDBC-ODBC Bridge,前提是已經創建了 ODBC 數據庫連接。 Bridge 與 Java 2 SDK, Standard Edition 一起提供,它本身不需要任何額外的安裝。Bridge 是普通的 ODBC 客戶端。不過請注意,您應該將 JDBC-ODBC Bridge 只用於試驗原型,或者在沒有可供使用的其他驅動程序時才用它。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved