当您在应用程序服务器外部使用 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”的部分。
此示例说明如何
Connection
从
DriverManager
. 该方法有几个不同的签名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 连接”)。
只有满足以下条件时,才认为用户名未指定:
该方法
DriverManager.getConnection(String url, String user, String password)
未使用。连接属性
user
不用于例如连接 URL 或其他地方。连接 URL 的权限中未提及用户,如
jdbc:mysql://localhost:3306/test
,或jdbc:mysql://@localhost:3306/test
。
请注意,如果 (1) 或 (2) 不成立并且传递了一个空字符串,则用户名是一个空字符串,并且不被视为未指定。