簡體   English   中英

連接到數據庫時,Class.forName(“ oracle.jdbc.driver.OracleDriver”)的實際用途是什么?

[英]What is the actual use of Class.forName(“oracle.jdbc.driver.OracleDriver”) while connecting to a database?

命令會是什么

Class.forName("oracle.jdbc.driver.OracleDriver")

連接到Oracle數據庫時該怎么做? 是否有另一種做同一件事的方式?

它使用FQCN(完全合格的類名稱) oracle.jdbc.driver.OracleDriver獲取對類對象的引用。

除了確保指定的類由當前的classloader加載之外,它在連接數據庫方面不做任何事情。 寫作之間沒有根本區別

Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");

Class.forName("com.example.some.jdbc.driver")調用顯示在使用JDBC的代碼中,因為這是加載JDBC驅動程序的方法

Java教程

在早期版本的JDBC中,要獲得連接,首先必須通過調用方法Class.forName初始化JDBC驅動程序。 此方法需要一個java.sql.Driver類型的對象。 每個JDBC驅動程序包含一個或多個實現接口java.sql.Driver
...
在類路徑中找到的所有JDBC 4.0驅動程序都會自動加載。 (但是,您必須使用Class.forName方法手動加載JDBC 4.0之前的所有驅動程序。)

進一步閱讀(閱讀:問題是重復的)

它注冊驅動程序; 形式:

public class SomeDriver implements Driver {
  static {
    try {
      DriverManager.registerDriver(new SomeDriver());
    } catch (SQLException e) {
      // TODO Auto-generated catch block
    }
  }

  //etc: implemented methods
}

Java JDBC教程中

在早期版本的JDBC中,要獲得連接,首先必須通過調用方法Class.forName初始化JDBC驅動程序。 在類路徑中找到的所有JDBC 4.0驅動程序都會自動加載。 (但是,您必須使用Class.forName方法手動加載JDBC 4.0之前的所有驅動程序。)

因此,如果您在Java 1.6上使用Oracle 11g(11.1)驅動程序,則無需調用Class.forName 否則,您需要調用它來初始化驅動程序。

在Java 6之前的版本中, DriverManager類不會知道您要使用哪個JDBC驅動程序。 Class.forName("...")是預加載驅動程序類的一種方法。

如果您使用的是Java 6,則不再需要這樣做。

該命令將加載Oracle jdbc驅動程序的類,以供DriverManager實例使用。 加載類后,系統可以使用它連接到Oracle。 或者,您可以使用DriverManager的registerDriver方法,並將其與所需的JDBC驅動程序實例一起傳遞。

另一種選擇是在啟動JVM時使用jdbc.drivers系統屬性在命令行上指定所需的驅動程序。

使用oracle.jdbc.OracleDriver,而不是oracle.jdbc.driver.OracleDriver。 如果驅動程序jar文件位於“ WEB-INF \\ lib”目錄中(如果使用的是Tomcat),則無需注冊。 將其另存為test.jsp並將其放在您的Web目錄中,然后在Tomcat管理器中重新部署您的Web應用程序文件夾:

<%@ page import="java.sql.*" %>

<HTML>
<HEAD>
<TITLE>Simple JSP Oracle Test</TITLE>
</HEAD><BODY>
<%
Connection conn = null;
try {
    Class.forName("oracle.jdbc.OracleDriver");
    conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:XXXX:dbName", "user", "password");
    Statement stmt = conn.createStatement();
    out.println("Connection established!");
}
catch (Exception ex)
{
    out.println("Exception: " + ex.getMessage() + "");

}
finally
{
    if (conn != null) {
        try {
            conn.close();   
        }
        catch (Exception ignored) {
            // ignore
        }
    }
}

%>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM