java.lang.Object
java.sql.DriverManager
管理一组JDBC驱动程序的基本服务。
注意: DataSource接口提供了另一种连接到数据源的方式。使用DataSource对象是连接到数据源的首选方式。
在初始化过程中,DriverManager类将尝试通过以下方式加载可用的JDBC驱动程序:
- 包含JDBC驱动程序的完全限定类名的冒号分隔列表的
jdbc.drivers系统属性。每个驱动程序都是使用系统类加载器加载的:jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
- 通过服务提供者加载机制加载的
java.sql.Driver类的服务提供者。
- 实现注意事项:
-
DriverManager的初始化是延迟进行的,并使用线程上下文类加载器查找服务提供者。应用程序中加载和可用的驱动程序将取决于触发DriverManager进行驱动程序初始化的线程的线程上下文类加载器。当调用
getConnection方法时,DriverManager将尝试从初始化时加载的驱动程序和使用与当前应用程序相同的类加载器显式加载的驱动程序中选择合适的驱动程序。 - 自版本:
- 1.1
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionstatic voidderegisterDriver(Driver driver) 从DriverManager的已注册驱动程序列表中移除指定的驱动程序。drivers()检索一个包含当前加载的所有JDBC驱动程序的流,当前调用者可以访问这些驱动程序。static ConnectiongetConnection(String url) 尝试建立到给定数据库URL的连接。static ConnectiongetConnection(String url, String user, String password) 尝试建立到给定数据库URL的连接。static ConnectiongetConnection(String url, Properties info) 尝试建立到给定数据库URL的连接。static Driver尝试定位了解给定URL的驱动程序。static Enumeration<Driver> 检索一个包含当前加载的所有JDBC驱动程序的枚举,当前调用者可以访问这些驱动程序。static int获取驱动程序在尝试登录到数据库时可以等待的最长时间(以秒为单位)。static PrintStream已弃用。static PrintWriter检索日志写入器。static void将消息打印到当前的JDBC日志流中。static voidregisterDriver(Driver driver) 使用DriverManager向其注册给定的驱动程序。static voidregisterDriver(Driver driver, DriverAction da) 使用DriverManager向其注册给定的驱动程序。static voidsetLoginTimeout(int seconds) 设置一旦识别出驱动程序后,驱动程序在尝试连接到数据库时可以等待的最长时间(以秒为单位)。static voidsetLogStream(PrintStream out) 已弃用。使用setLogWriterstatic voidsetLogWriter(PrintWriter out) 设置由DriverManager和所有驱动程序使用的日志/跟踪PrintWriter对象。
-
Method Details
-
getLogWriter
检索日志写入器。应使用getLogWriter和setLogWriter方法,而不是已弃用的get/setlogStream方法。- 返回:
-
一个
java.io.PrintWriter对象 - 自版本:
- 1.2
- 参见:
-
setLogWriter
设置由DriverManager和所有驱动程序使用的日志/跟踪PrintWriter对象。如果存在安全管理器,则首先使用
SQLPermission("setLog")权限调用其checkPermission方法,以检查调用者是否被允许调用setLogWriter。- 参数:
-
out- 新的日志/跟踪PrintStream对象;null表示禁用日志记录和跟踪 - 抛出:
-
SecurityException- 如果存在安全管理器并且其checkPermission方法拒绝设置日志写入器的权限 - 自版本:
- 1.2
- 参见:
-
getConnection
尝试建立到给定数据库URL的连接。DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。注意:如果
url中指定了属性,并且在Properties对象中也指定了相同的属性,则实现将决定哪个值优先。为了最大的可移植性,应用程序应该只指定一个属性。- 参数:
-
url- 形式为jdbc:子协议:子名称的数据库URL -
info- 作为连接参数的任意字符串标签/值对的列表;通常至少应包含"user"和"password"属性 - 返回:
- 到URL的连接
- 抛出:
-
SQLException- 如果发生数据库访问错误或url为null -
SQLTimeoutException- 当驱动程序确定setLoginTimeout方法指定的超时值已超过,并且至少尝试取消当前数据库连接尝试时
-
getConnection
public static Connection getConnection(String url, String user, String password) throws SQLException 尝试建立到给定数据库URL的连接。DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。注意:如果
url中也指定了user或password属性,则实现将决定哪个值优先。为了最大的可移植性,应用程序应该只指定一个属性。- 参数:
-
url- 形式为jdbc:子协议:子名称的数据库URL -
user- 连接所代表的数据库用户 -
password- 用户的密码 - 返回:
- 到URL的连接
- 抛出:
-
SQLException- 如果发生数据库访问错误或url为null -
SQLTimeoutException- 当驱动程序确定setLoginTimeout方法指定的超时值已超过,并且至少尝试取消当前数据库连接尝试时
-
getConnection
尝试建立到给定数据库URL的连接。DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。- 参数:
-
url- 形式为jdbc:子协议:子名称的数据库URL - 返回:
- 到URL的连接
- 抛出:
-
SQLException- 如果发生数据库访问错误或url为null -
SQLTimeoutException- 当驱动程序确定setLoginTimeout方法指定的超时值已超过,并且至少尝试取消当前数据库连接尝试时
-
getDriver
尝试定位了解给定URL的驱动程序。DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。- 参数:
-
url- 形式为jdbc:子协议:子名称的数据库URL - 返回:
-
代表可以连接到给定URL的驱动程序的
Driver对象 - 抛出:
-
SQLException- 如果发生数据库访问错误
-
registerDriver
使用DriverManager向其注册给定的驱动程序。新加载的驱动程序类应调用registerDriver方法,以使自己为DriverManager所知。如果驱动程序当前已注册,则不会执行任何操作。- 参数:
-
driver- 要向DriverManager注册的新JDBC驱动程序 - 抛出:
-
SQLException- 如果发生数据库访问错误 -
NullPointerException- 如果driver为null
-
registerDriver
使用DriverManager向其注册给定的驱动程序。新加载的驱动程序类应调用registerDriver方法,以使自己为DriverManager所知。如果驱动程序当前已注册,则不会执行任何操作。- 参数:
-
driver- 要向DriverManager注册的新JDBC驱动程序 -
da- 在调用DriverManager#deregisterDriver时要使用的DriverAction实现 - 抛出:
-
SQLException- 如果发生数据库访问错误 -
NullPointerException- 如果driver为null - 自版本:
- 1.8
-
deregisterDriver
从DriverManager的注册驱动程序列表中移除指定的驱动程序。如果指定要移除的驱动程序的值为
null,则不会执行任何操作。如果存在安全管理器,则首先调用其
checkPermission方法,使用SQLPermission("deregisterDriver")权限来检查调用者是否被允许注销JDBC驱动程序。如果在注册驱动程序时指定了一个
DriverAction实例,则在从注册的驱动程序列表中移除驱动程序之前将调用其注销方法。- 参数:
-
driver- 要移除的JDBC驱动程序 - 抛出:
-
SQLException- 如果发生数据库访问错误 -
SecurityException- 如果存在安全管理器并且其checkPermission方法拒绝注销驱动程序的权限。 - 参见:
-
getDrivers
检索当前调用者具有访问权限的所有当前加载的JDBC驱动程序的枚举。注意: 可以使用
d.getClass().getName()来查找驱动程序的类名。- 返回:
- 调用者类加载器加载的JDBC驱动程序列表
- 参见:
-
drivers
检索当前调用者具有访问权限的所有当前加载的JDBC驱动程序的流。- 返回:
- 调用者类加载器加载的JDBC驱动程序流
- 自JDK版本:
- 9
-
setLoginTimeout
public static void setLoginTimeout(int seconds) 设置驱动程序在识别后尝试连接到数据库时等待的最长时间(以秒为单位)。- 参数:
-
seconds- 登录时间限制(以秒为单位);零表示没有限制 - 参见:
-
getLoginTimeout
public static int getLoginTimeout()获取驱动程序在尝试登录到数据库时可以等待的最长时间(以秒为单位)。- 返回:
- 驱动程序登录时间限制(以秒为单位)
- 参见:
-
setLogStream
Deprecated.UsesetLogWriter设置DriverManager和所有驱动程序使用的日志/跟踪PrintStream。如果存在安全管理器,则首先调用其
checkPermission方法,使用SQLPermission("setLog")权限来检查调用者是否被允许调用setLogStream。- 参数:
-
out- 新的日志/跟踪PrintStream;要禁用,请设置为null - 抛出:
-
SecurityException- 如果存在安全管理器并且其checkPermission方法拒绝设置日志流的权限。 - 参见:
-
getLogStream
Deprecated.UsegetLogWriter检索DriverManager和所有驱动程序使用的日志/跟踪PrintStream。- 返回:
-
日志/跟踪PrintStream;如果已禁用,则为
null - 参见:
-
println
向当前JDBC日志流打印消息。- 参数:
-
message- 日志或跟踪消息
-
getLogWriter