命令是什么
Class.forName("oracle.jdbc.driver.OracleDriver")
连接到Oracle数据库时完全一样吗?是否有另一种方法可以做同样的事情?
答案 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。
在以前的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)
在以前的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
}
}
}
%>