【问题标题】:Why is string DRIVER being set?为什么要设置字符串 DRIVER?
【发布时间】:2018-06-14 19:07:50
【问题描述】:

我正在学习教程,正在查看以下代码:

package com.za.tutorial;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class CreateDB {
    public static final String DRIVER =  "org.apache.derby.jdbc.EmbeddedDriver";
    public static final String JDBC_URL = "jdbc:derby:zadb;create=true";
    public static void main(String[] args) throws SQLException {        
        Connection connection = DriverManager.getConnection(JDBC_URL);
        connection.createStatement().execute("create table channels (channel varchar(20), topic varchar(20),videoclip varchar(20))");
        connection.createStatement().execute("insert into channels values " +
                                        "('oodp', 'creational', 'singleton'), " +
                                        "('oodp', 'creational', 'factory method'), " +
                                        "('oodp', 'creational', 'abstract factory')");
        System.out.println("channels table created and records successfully inserted...");

    }
}

为什么要引入这条线?

public static final String DRIVER =  "org.apache.derby.jdbc.EmbeddedDriver";

没有它,代码也可以工作,而且似乎没有被引用

【问题讨论】:

  • 这条线没用。在 Java 的早期,有必要通过运行带有驱动程序类的Class.forName(...) 来“初始化”驱动程序。但多年来一直没有必要。

标签: java sql jdbc


【解决方案1】:

在 JDBC 4 (Java 6) 之前的 JDBC 版本中,您需要使用 Class.forName(...) 显式加载 JDBC 驱动程序。在 JDBC 4 中,引入了自动加载驱动程序(假设驱动程序支持它),它允许 DriverManager 自动发现并加载初始类路径上的驱动程序。详情请参阅How is driver class located in JDBC4

您使用的教程可能有一个较早的版本,它确实显式加载了驱动程序,例如以

的形式
public class CreateDB {
    public static final String DRIVER =  "org.apache.derby.jdbc.EmbeddedDriver";
    public static final String JDBC_URL = "jdbc:derby:zadb;create=true";

    public static void main(String[] args) throws SQLException, ClassNotFoundException {        
        Class.forName(DRIVER);
        Connection connection = DriverManager.getConnection(JDBC_URL);
        connection.createStatement().execute("create table channels (channel varchar(20), topic varchar(20),videoclip varchar(20))");
        connection.createStatement().execute("insert into channels values " +
                                        "('oodp', 'creational', 'singleton'), " +
                                        "('oodp', 'creational', 'factory method'), " +
                                        "('oodp', 'creational', 'abstract factory')");
        System.out.println("channels table created and records successfully inserted...");
    }
}

本教程的作者似乎删除了驱动程序的显式加载,但忘记删除常量。您可以安全地删除它,它没有在显示的代码中使用。

请注意,在某些情况下仍然需要像这样加载驱动程序。

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2021-12-20
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多