`
java_林
  • 浏览: 19945 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

DriverManager

阅读更多
最近在看jdbc4.0规范,想看看是如何自动获取驱动的,于是看了下DriverManager
loadInitialDrivers方法中

 try {
	    drivers = (String) java.security.AccessController.doPrivileged(
		new sun.security.action.GetPropertyAction("jdbc.drivers"));
        } catch (Exception ex) {
            drivers = null;
        }

http://stackoverflow.com/questions/4954924/getpropertyaction-vs-system-getproperty-in-obtaining-system-variables
相对于System.getProperty,GetPropertyAction更严格,当前调用的class必须被jvm信任才能从读取相关信息。至于SecurityManager这个目前还没遇到过。


DriverService ds = new DriverService();
java.security.AccessController.doPrivileged(ds);

class DriverService implements java.security.PrivilegedAction {
        Iterator ps = null;
	public DriverService() {};
        public Object run() {

	// uncomment the followin line before mustang integration 	
        // Service s = Service.lookup(java.sql.Driver.class);
	// ps = s.iterator();

	ps = Service.providers(java.sql.Driver.class);

	/* Load these drivers, so that they can be instantiated. 
	 * It may be the case that the driver class may not be there
         * i.e. there may be a packaged driver with the service class
         * as implementation of java.sql.Driver but the actual class
         * may be missing. In that case a sun.misc.ServiceConfigurationError
         * will be thrown at runtime by the VM trying to locate 
	 * and load the service.
         * 
	 * Adding a try catch block to catch those runtime errors
         * if driver not available in classpath but it's 
	 * packaged as service and that service is there in classpath.
	 */
		
	try {
           while (ps.hasNext()) {
               ps.next();
           } // end while
	} catch(Throwable t) {
	    // Do nothing
	}
        return null;
    } //end run

} //end DriverService	
 

可以看到,通过使用SPI(Service Provider Interface)查找service名称为java.sql.Driver的文件,java.sql.Driver的文件中是一个实现了该接口的类,
如:com.mysql.jdbc.Driver
然后加载这个类(具体请看sun.misc.Service),Service中LazyIterator实现了Iterator接口
分享到:
评论

相关推荐

    DriverManager 驱动加载管理程序

    DriverManager是一款专为驱动开发设计的实用工具,它集成了驱动加载、卸载以及系统核心结构信息的查看等功能,极大地简化了驱动程序开发者的工作流程。本文将深入探讨DriverManager的核心功能,包括驱动管理、内核级...

    java数据库连接DriverManager

    Java中的`DriverManager`是JDBC(Java Database Connectivity)的核心组件,主要负责管理数据库驱动程序并建立数据库连接。它的功能包括跟踪已注册的驱动程序、处理登录限制以及创建与数据库的连接。`DriverManager`...

    通过DriverManager类提供的方法控制日志输出

    虽然`DriverManager`类本身并不直接提供日志记录功能,但我们可以利用其方法来间接控制日志输出。在本文中,我们将深入探讨如何借助`DriverManager`和其他相关工具来实现这一目标。 首先,`DriverManager`类主要...

    JDBC DriverManager.registerDriver(new Driver());

    在Java数据库连接(JDBC)中,`DriverManager.registerDriver(new Driver())` 是一个关键的步骤,用于将数据库驱动程序注册到JDBC的`DriverManager`中,以便后续的数据库连接操作。这个过程通常在应用程序启动时进行...

    GYWDK-DriverManager使用说明1

    GYWDK-DriverManager是一个专为Windows操作系统设计的动态链接库(DLL),它提供了一种接口来管理和操作驱动程序。该库主要包含两个导出函数,用于与驱动相关的操作,如安装、启动、停止和卸载。以下是这两个关键...

    JDBCTM 指南:入门3 – DriverManager

    内容: 3 – DriverManager3.1 概述DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间...

    驱动管家DriverManagerv1.0中文绿色免费版

    驱动管家DriverManager v1.0中文绿色免费版是一款专为用户设计的系统工具,主要功能集中在硬件驱动程序的管理上,包括驱动升级、驱动备份和驱动还原三个方面。这些功能对于保持计算机系统的稳定性和优化硬件性能至关...

    java连接AmericanascII7字符集oracle例子

    import java.sql.DriverManager; import java.sql.SQLException; ``` 2. 注册JDBC驱动: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` 3. 创建数据库连接: ```java Connection conn =...

    sql2008_jdbc

    1. 连接到SQL Server数据库:通过`DriverManager.getConnection()`方法,输入服务器名、数据库名、用户名和密码来建立连接。 2. 创建Statement或PreparedStatement对象:用于执行SQL查询和命令。 3. 执行SQL语句:...

    神通数据库连接oscarJDBC.jar

    神通数据库oscarJDBC.jar数据库连接驱动,找了很久,javal连接方式 public static Connection con() throws Exception {... Connection conn = DriverManager.getConnection(URL,"用户名","密码");  return conn;  }

    连接Hive相关Jar包(DBeaver和JDBC均可使用)

    Connection conn = DriverManager.getConnection(url, username, password); // ... 执行查询和其他操作 ... } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 确保在...

    hive jdbc 连接所需要的jar包

    Connection con = DriverManager.getConnection("jdbc:hive2://<hive_server>:<port>/<database>", "<username>", "<password>"); ``` 确保所有必要的jar包都在classpath中,否则可能会遇到...

    Java创建和关闭数据库连接的方法附代码.rar

     Connection con=DriverManager.getConnection(dbURL,user,password); //获取连接  DatabaseMetaData dbmd=con.getMetaData(); //获取DatabaseMetaData实例  System.out.println(dbmd.getDatabaseProductName()...

    数据库直连驱动包

    3. 使用`DriverManager.getConnection()`方法创建数据库连接。 4. 编写SQL语句并使用Statement或PreparedStatement对象执行。 5. 处理结果集(ResultSet)并关闭资源。 理解并正确使用这些驱动对于开发跨平台的...

    jsp中各种连接数据库方式

    Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql = "SELECT * FROM ...

    JDBC详解 JDBC详解

    DriverManager 类包含一列 Driver 类,它们已通过调用方法 DriverManager.registerDriver 对自己进行了注册。所有 Driver 类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时 DriverManager 类进行...

    mongodb-jdbc

    mongodb-jdbc mongodb java jdbc驱动=============== public static void main(String args [])抛出... 连接c = DriverManager.getConnection(jdbcurl,username,password); 语句st = c.createStatement(); prin

    JDBC基础教程之驱动设置.doc

    然而,JDBC还提供了其他几个方法供用户使用,如`DriverManager.getDriver`、`DriverManager.getDrivers`和`DriverManager.registerDriver`,以及`Driver`类的`connect`方法。尽管如此,在多数场景下,让`...

    JDBC详解

    - **DriverManager.getDriver()**:返回一个能够处理给定数据库URL的`Driver`对象,但通常不建议直接使用,而是让`DriverManager`自行管理连接细节。 - **DriverManager.getDrivers()**:返回当前注册的所有驱动程序...

    JAVA数据库大全.pdf

    首先,需要加载 Oracle 的驱动程序,然后使用 DriverManager 获取连接对象。下面是 Oracle 数据库连接的示例代码: Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:...

Global site tag (gtag.js) - Google Analytics