连接到数据库时,Class.forName(“oracle.jdbc.driver.OracleDriver”)的实际用途是什么?
什么命令
Class.forName("oracle.jdbc.driver.OracleDriver")
连接到Oracle数据库时正确吗? 有没有另一种做同样的事情?
它使用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的传统代码中,因为这是加载JDBC驱动程序的传统方式 。
从Java教程 :
在以前的JDBC版本中,要获得连接,首先必须调用方法
Class.forName
来初始化JDBC驱动程序。 这个方法需要一个java.sql.Driver
types的对象。 每个JDBC驱动程序包含一个或多个实现接口java.sql.Driver
。
…
在您的类path中find的任何JDBC 4.0驱动程序都会自动加载。 (但是,您必须使用Class.forName
方法手动加载JDBC 4.0之前的任何驱动程序。
进一步阅读(阅读:这是一个重复的问题)
- 如果您不使用返回值,Class.forName()将提供什么function?
- Class.forName()如何工作?
- 什么'Class.forName(“org.sqlite.JDBC”);' 做?
- “Class.forName(”MY_JDBC_DRIVER“)”的目的是什么?
- 加载JDBC驱动程序
它注册了驱动程序; 一些forms的东西:
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驱动程序。 在您的类path中find的任何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,则不再需要执行此操作。
另一种方法是使用jdbc.drivers系统属性在启动JVM时在命令行上指定所需的驱动程序。
该命令加载Oracle jdbc驱动程序的类以使其可用于DriverManager实例。 加载类后,系统可以使用它连接到Oracle。 作为替代,您可以使用DriverManager的registerDriver方法,并将其传递给您需要的JDBC驱动程序的实例。
使用oracle.jdbc.OracleDriver,而不是oracle.jdbc.driver.OracleDriver。 如果驱动程序jar文件位于“WEB-INF \ lib”目录中(如果使用的是Tomcat),则不需要注册它。 将其另存为test.jsp并将其放在您的Web目录中,然后在Tomcatpipe理器中重新部署您的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 } } } %>