【问题标题】:why is class.forname(com.mysql.jdbc.Driver) written in a db connection class? [duplicate]为什么 class.forname(com.mysql.jdbc.Driver) 写在 db 连接类中? [复制]
【发布时间】:2014-04-25 03:22:20
【问题描述】:

我编写了一个 dbconnection.java 类,它有一个静态块,我在其中加载驱动程序类

    static
{
    try
    {
        Class.forName(com.mysql.jdbc.Driver);
    }
    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }
}

我知道这个静态块是为了注册驱动而写的。但即使我评论这个静态块并尝试建立数据库连接,它也正在连接。

所以我想知道什么是重要性或意义 编写这个静态块

【问题讨论】:

标签: java jdbc


【解决方案1】:

(我正在回答这个问题,因为很遗憾我们没有 RTFM 关闭原因)

如果您阅读 tutorial provided by oracle,您会发现这曾经是必要的,但对于许多现代 (JDBC 4.0) 驱动程序来说,并非如此:

在以前的 JDBC 版本中,要获得连接,首先必须通过调用方法 Class.forName 来初始化 JDBC 驱动程序。此方法需要 java.sql.Driver 类型的对象。每个 JDBC 驱动程序都包含一个或多个实现接口 java.sql.Driver 的类。 Java DB 的驱动程序是 org.apache.derby.jdbc.EmbeddedDriver 和 org.apache.derby.jdbc.ClientDriver,而 MySQL Connector/J 的驱动程序是 com.mysql.jdbc.Driver。请参阅 DBMS 驱动程序的文档以获取实现接口 java.sql.Driver 的类的名称。

在您的类路径中找到的任何 JDBC 4.0 驱动程序都会自动加载。 (但是,您必须使用 Class.forName 方法手动加载 JDBC 4.0 之前的所有驱动程序。)

(强调我的)

【讨论】:

    【解决方案2】:

    将此代码放在静态块中用于确保一个进程具有相同的驱动程序。它在加载类时执行(或初始化,准确地说,但您通常不会注意到差异)。 详情可见this link

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 2015-12-12
      • 2014-05-24
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2012-04-19
      相关资源
      最近更新 更多