Module java.sql
Package java.sql

Class DriverManager

java.lang.Object
java.sql.DriverManager

public class DriverManager extends Object
管理一组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 Details

    • getLogWriter

      public static PrintWriter getLogWriter()
      检索日志写入器。应使用getLogWritersetLogWriter方法,而不是已弃用的get/setlogStream方法。
      返回:
      一个java.io.PrintWriter对象
      自版本:
      1.2
      参见:
    • setLogWriter

      public static void setLogWriter(PrintWriter out)
      设置由DriverManager和所有驱动程序使用的日志/跟踪PrintWriter对象。

      如果存在安全管理器,则首先使用SQLPermission("setLog")权限调用其checkPermission方法,以检查调用者是否被允许调用setLogWriter

      参数:
      out - 新的日志/跟踪PrintStream对象;null表示禁用日志记录和跟踪
      抛出:
      SecurityException - 如果存在安全管理器并且其checkPermission方法拒绝设置日志写入器的权限
      自版本:
      1.2
      参见:
    • getConnection

      public static Connection getConnection(String url, Properties info) throws SQLException
      尝试建立到给定数据库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中也指定了userpassword属性,则实现将决定哪个值优先。为了最大的可移植性,应用程序应该只指定一个属性。

      参数:
      url - 形式为jdbc:子协议:子名称的数据库URL
      user - 连接所代表的数据库用户
      password - 用户的密码
      返回:
      到URL的连接
      抛出:
      SQLException - 如果发生数据库访问错误或url为null
      SQLTimeoutException - 当驱动程序确定setLoginTimeout方法指定的超时值已超过,并且至少尝试取消当前数据库连接尝试时
    • getConnection

      public static Connection getConnection(String url) throws SQLException
      尝试建立到给定数据库URL的连接。 DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。
      参数:
      url - 形式为jdbc:子协议:子名称的数据库URL
      返回:
      到URL的连接
      抛出:
      SQLException - 如果发生数据库访问错误或url为null
      SQLTimeoutException - 当驱动程序确定setLoginTimeout方法指定的超时值已超过,并且至少尝试取消当前数据库连接尝试时
    • getDriver

      public static Driver getDriver(String url) throws SQLException
      尝试定位了解给定URL的驱动程序。 DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。
      参数:
      url - 形式为jdbc:子协议:子名称的数据库URL
      返回:
      代表可以连接到给定URL的驱动程序的Driver对象
      抛出:
      SQLException - 如果发生数据库访问错误
    • registerDriver

      public static void registerDriver(Driver driver) throws SQLException
      使用DriverManager向其注册给定的驱动程序。新加载的驱动程序类应调用registerDriver方法,以使自己为DriverManager所知。如果驱动程序当前已注册,则不会执行任何操作。
      参数:
      driver - 要向DriverManager注册的新JDBC驱动程序
      抛出:
      SQLException - 如果发生数据库访问错误
      NullPointerException - 如果driver为null
    • registerDriver

      public static void registerDriver(Driver driver, DriverAction da) throws SQLException
      使用DriverManager向其注册给定的驱动程序。新加载的驱动程序类应调用registerDriver方法,以使自己为DriverManager所知。如果驱动程序当前已注册,则不会执行任何操作。
      参数:
      driver - 要向DriverManager注册的新JDBC驱动程序
      da - 在调用DriverManager#deregisterDriver时要使用的DriverAction实现
      抛出:
      SQLException - 如果发生数据库访问错误
      NullPointerException - 如果driver为null
      自版本:
      1.8
    • deregisterDriver

      public static void deregisterDriver(Driver driver) throws SQLException
      DriverManager的注册驱动程序列表中移除指定的驱动程序。

      如果指定要移除的驱动程序的值为null,则不会执行任何操作。

      如果存在安全管理器,则首先调用其checkPermission方法,使用SQLPermission("deregisterDriver")权限来检查调用者是否被允许注销JDBC驱动程序。

      如果在注册驱动程序时指定了一个DriverAction实例,则在从注册的驱动程序列表中移除驱动程序之前将调用其注销方法。

      参数:
      driver - 要移除的JDBC驱动程序
      抛出:
      SQLException - 如果发生数据库访问错误
      SecurityException - 如果存在安全管理器并且其checkPermission方法拒绝注销驱动程序的权限。
      参见:
    • getDrivers

      public static Enumeration<Driver> getDrivers()
      检索当前调用者具有访问权限的所有当前加载的JDBC驱动程序的枚举。

      注意: 可以使用d.getClass().getName()来查找驱动程序的类名。

      返回:
      调用者类加载器加载的JDBC驱动程序列表
      参见:
    • drivers

      public static Stream<Driver> drivers()
      检索当前调用者具有访问权限的所有当前加载的JDBC驱动程序的流。
      返回:
      调用者类加载器加载的JDBC驱动程序流
      自JDK版本:
      9
    • setLoginTimeout

      public static void setLoginTimeout(int seconds)
      设置驱动程序在识别后尝试连接到数据库时等待的最长时间(以秒为单位)。
      参数:
      seconds - 登录时间限制(以秒为单位);零表示没有限制
      参见:
    • getLoginTimeout

      public static int getLoginTimeout()
      获取驱动程序在尝试登录到数据库时可以等待的最长时间(以秒为单位)。
      返回:
      驱动程序登录时间限制(以秒为单位)
      参见:
    • setLogStream

      @Deprecated(since="1.2") public static void setLogStream(PrintStream out)
      Deprecated.
      Use setLogWriter
      设置DriverManager和所有驱动程序使用的日志/跟踪PrintStream。

      如果存在安全管理器,则首先调用其checkPermission方法,使用SQLPermission("setLog")权限来检查调用者是否被允许调用setLogStream

      参数:
      out - 新的日志/跟踪PrintStream;要禁用,请设置为null
      抛出:
      SecurityException - 如果存在安全管理器并且其checkPermission方法拒绝设置日志流的权限。
      参见:
    • getLogStream

      @Deprecated(since="1.2") public static PrintStream getLogStream()
      Deprecated.
      Use getLogWriter
      检索DriverManager和所有驱动程序使用的日志/跟踪PrintStream。
      返回:
      日志/跟踪PrintStream;如果已禁用,则为null
      参见:
    • println

      public static void println(String message)
      向当前JDBC日志流打印消息。
      参数:
      message - 日志或跟踪消息