连接器和 API 手册  / 第 3 章 MySQL Connector/J 开发人员指南  / 3.6 JDBC 概念  /  3.6.1 使用JDBC DriverManager接口连接MySQL

DriverManager 3.6.1 使用JDBC接口连接MySQL

当您在应用程序服务器外部使用 JDBC 时, DriverManager该类会管理连接的建立。

指定要DriverManager尝试建立连接的 JDBC 驱动程序。最简单的方法是在实现 接口Class.forName()的类上使用。java.sql.Driver对于 MySQL Connector/J,此类的名称是 com.mysql.cj.jdbc.Driver. 使用此方法,您可以使用外部配置文件来提供连接到数据库时要使用的驱动程序类名和驱动程序参数。

以下 Java 代码部分显示了如何从main()应用程序的方法中注册 MySQL Connector/J。如果测试此代码,请首先阅读 第 3.3 节“连接器/J 安装”中的安装部分,以确保您已正确安装和 CLASSPATH设置连接器。此外,确保 MySQL 配置为接受外部 TCP/IP 连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// Notice, do not import com.mysql.cj.jdbc.*
// or you will have problems!
public class LoadDriver {
    public static void main(String[] args) {
        try {
            // The newInstance() call is a work around for some
            // broken Java implementations
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
        } catch (Exception ex) {
            // handle the error
        }
    }
}

向 注册驱动程序后 DriverManager,您可以 Connection通过调用 获取连接到特定数据库的实例 DriverManager.getConnection()

示例 3.4 Connector/J:从 DriverManager

如果您还没有这样做,请在 使用 下面的示例之前查看上面 第 3.6.1 节“使用 JDBCDriverManager 接口连接到 MySQL”的部分。

此示例说明如何 ConnectionDriverManager. 该方法有几个不同的签名getConnection() 。有关如何使用它们的更多具体信息,请参阅 JDK 附带的 API 文档。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
Connection conn = null;
...
try {
    conn =
       DriverManager.getConnection("jdbc:mysql://localhost/test?" +
                                   "user=minty&password=greatsqldb");
    // Do something with the Connection
   ...
} catch (SQLException ex) {
    // handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
}

一旦 aConnection被建立,它就可以用来创建对象,Statement以及 PreparedStatement检索关于数据库的元数据。这将在以下部分中解释。


对于 Connector/J 8.0.24 及更高版本:当未指定连接用户时,Connector/J 的身份验证插件实现默认使用运行 MySQL 服务器身份验证应用程序的 OS 用户的名称(除非正在使用 Kerberos 身份验证插件;有关详细信息,请参阅 第 3.5.12.2 节“使用 Kerberos 连接”)。

笔记

只有满足以下条件时,才认为用户名未指定:

  1. 该方法DriverManager.getConnection(String url, String user, String password)未使用。

  2. 连接属性user不用于例如连接 URL 或其他地方。

  3. 连接 URL 的权限中未提及用户,如 jdbc:mysql://localhost:3306/test,或 jdbc:mysql://@localhost:3306/test

请注意,如果 (1) 或 (2) 不成立并且传递了一个空字符串,则用户名是一个空字符串,并且不被视为未指定。