连接数据库时Class.forName(" oracle.jdbc.driver.OracleDriver")的实际用途是什么?

时间:2011-11-08 15:44:50

标签: java jdbc

命令是什么

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

连接到Oracle数据库时完全一样吗?是否有另一种方法可以做同样的事情?

7 个答案:

答案 0 :(得分:62)

它使用FQCN(完全限定的类名)oracle.jdbc.driver.OracleDriver获取对类对象的引用。

除了确保当前类加载器加载指定的类之外,它不会“连接”到数据库“”。写作

之间没有根本区别
Class<?> driverClass = Class.forName("oracle.jdbc.driver.OracleDriver");
// and
Class<?> stringClass = Class.forName("java.lang.String");

Class.forName("com.example.some.jdbc.driver")次调用显示在使用JDBC的 legacy 代码中,因为that is the legacy way of loading a JDBC driver

来自The Java Tutorial

  

在以前的JDBC版本中,要获得连接,首先必须通过调用方法Class.forName来初始化JDBC驱动程序。此方法需要类型为java.sql.Driver的对象。每个JDBC驱动程序都包含一个或多个实现接口java.sql.Driver的类   ...
  在类路径中找到的任何JDBC 4.0驱动程序都会自动加载。 (但是,必须使用方法Class.forName在JDBC 4.0之前手动加载任何驱动程序。)

进一步阅读 (阅读:这是一个重复的问题)

答案 1 :(得分:13)

注册驱动程序;形式的东西:

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

  //etc: implemented methods
}

答案 2 :(得分:5)

来自Java JDBC tutorial

  

在以前的JDBC版本中,要获得连接,首先必须通过调用方法Class.forName来初始化JDBC驱动程序。   在类路径中找到的任何JDBC 4.0驱动程序都会自动加载。 (但是,必须使用方法Class.forName在JDBC 4.0之前手动加载任何驱动程序。)

因此,如果您在Java 1.6中使用Oracle 11g(11.1)驱动程序,则无需致电Class.forName。否则,您需要调用它来初始化驱动程序。

答案 3 :(得分:1)

Pre Java 6 DriverManager类不知道您要使用哪个JDBC驱动程序。 Class.forName("...")是预加载驱动程序类的一种方式。

如果您使用的是Java 6,则不再需要这样做。

答案 4 :(得分:1)

另一种方法是use the jdbc.drivers System property在启动JVM时在命令行上指定所需的驱动程序。

答案 5 :(得分:0)

此命令加载可用于DriverManager实例的Oracle jdbc驱动程序类。加载类后,系统可以使用它连接到Oracle。作为替代方案,您可以使用DriverManager的registerDriver方法,并将其与您需要的JDBC驱动程序实例一起传递。

答案 6 :(得分:-2)

使用oracle.jdbc.OracleDriver,而不是oracle.jdbc.driver.OracleDriver。如果您使用Tomcat,如果驱动程序jar文件位于“WEB-INF \ lib”目录中,则无需注册它。将其保存为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
        }
    }
}

%>