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 void
deregisterDriver
(Driver driver) 从DriverManager
的已注册驱动程序列表中移除指定的驱动程序。drivers()
检索一个包含当前加载的所有JDBC驱动程序的流,当前调用者可以访问这些驱动程序。static Connection
getConnection
(String url) 尝试建立到给定数据库URL的连接。static Connection
getConnection
(String url, String user, String password) 尝试建立到给定数据库URL的连接。static Connection
getConnection
(String url, Properties info) 尝试建立到给定数据库URL的连接。static Driver
尝试定位了解给定URL的驱动程序。static Enumeration
<Driver> 检索一个包含当前加载的所有JDBC驱动程序的枚举,当前调用者可以访问这些驱动程序。static int
获取驱动程序在尝试登录到数据库时可以等待的最长时间(以秒为单位)。static PrintStream
已弃用。static PrintWriter
检索日志写入器。static void
将消息打印到当前的JDBC日志流中。static void
registerDriver
(Driver driver) 使用DriverManager
向其注册给定的驱动程序。static void
registerDriver
(Driver driver, DriverAction da) 使用DriverManager
向其注册给定的驱动程序。static void
setLoginTimeout
(int seconds) 设置一旦识别出驱动程序后,驱动程序在尝试连接到数据库时可以等待的最长时间(以秒为单位)。static void
setLogStream
(PrintStream out) 已弃用。使用setLogWriter
static void
setLogWriter
(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