![](/img/trans.png)
[英]Why we use Class.forName(“oracle.jdbc.driver.OracleDriver”) while connecting to a database?
[英]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.