为啥要设置字符串 DRIVER?

Posted

技术标签:

【中文标题】为啥要设置字符串 DRIVER?【英文标题】: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(...) 来“初始化”驱动程序。但多年来一直没有必要。 【参考方案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...");
    

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

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

【讨论】:

以上是关于为啥要设置字符串 DRIVER?的主要内容,如果未能解决你的问题,请参考以下文章

请问JSON格式为啥要转换成JavaBean对象去刷新界面,而不能直接用JSON去刷新界面

为啥我应该使用 CUDA Driver API 而不是 CUDA Runtime API?

为啥要更改此字符串?

有字符串时为啥要使用 StringBuilder?

机器人框架为啥要在命令字符串中加引号?

为啥要将 json 作为字符串存储在 json 中