`
java_林
  • 浏览: 19549 次
  • 性别: 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类提供的方法控制日志输出

    java数据库连接DriverManager

    java数据库连接DriverManager

    DriverManager 驱动加载管理程序

    一个自己写的工具程序,包含驱动开发过程中所需的几种常用功能:1、驱动加卸载。2、内核IDT、GDT、符号链信息查看。3、物理内存浏览。4、掩码计算。

    JDBC DriverManager.registerDriver(new Driver());

    JDBC DriverManager.registerDriver(new Driver());

    GYWDK-DriverManager使用说明1

    @:GYWDK-DriverManager使用说明GYWDK-DriverManager使用说明使用说明导出函数导出函数GYWDK-DriverManager.

    JDBCTM 指南:入门3 – DriverManager

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

    神通数据库连接oscarJDBC.jar

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

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

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

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

    驱动管家DriverManager有三个功能:驱动升级、驱动备份、驱动还原!是一款针对硬件驱动管理的软件

    JAVA编写的图书馆管理系统

    con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); rs=sql.executeQuery("SELECT * FROM login"); boolean boo=true; while(rs.next()){ if(rs....

    mongodb-jdbc

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

    数据连接池

    DriverManager.deregisterDriver(driver); log("撤销JDBC驱动程序 " + driver.getClass().getName() + "的注册"); } catch (SQLException e) { log(e, "无法撤销下列JDBC驱动程序的注册: " + driver.getClass()...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

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

    JAVA数据库大全.pdf

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

    jsp新闻发布系统

    Connection con = DriverManager.getConnection("jdbc:odbc:database"); Statement smt =con.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); String getpaperdata = ...

    Excel POI读取封装(文件+示范代码)

    import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.DateFormat; import java.text....

    driverManager.py

    robotframework+python+Appium的一个自动登录app的实例,实现app启动,自动登录,读取配置文件等

    JDBC连接各种数据代码.doc

    con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test2","root","root"); 连接oracle classes12.jar Class.forName( "oracle.jdbc.driver.OracleDriver" ); con = DriverManager.get...

    JDK的sql设计不合理导致的驱动类初始化死锁问题

    在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是我们第一次调用java.sql.DriverManager.registerDriver注册一...

    Java使用JDBC连接数据库.docx

    o(2)通过DriverManager获取数据库连接 o(3)通过Connection对象获取Statement对象 o(4)使用Statement接口执行SQL语句 o(5)操作ResultSet结果集 o(6)关闭连接,释放资源 2.下面进行代码演示 1.注册数据库...

Global site tag (gtag.js) - Google Analytics