最近在看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类提供的方法控制日志输出
java数据库连接DriverManager
一个自己写的工具程序,包含驱动开发过程中所需的几种常用功能:1、驱动加卸载。2、内核IDT、GDT、符号链信息查看。3、物理内存浏览。4、掩码计算。
JDBC DriverManager.registerDriver(new Driver());
@:GYWDK-DriverManager使用说明GYWDK-DriverManager使用说明使用说明导出函数导出函数GYWDK-DriverManager.
内容: 3 – DriverManager3.1 概述DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间...
神通数据库oscarJDBC.jar数据库连接驱动,找了很久,javal连接方式 public static Connection con() throws Exception {... Connection conn = DriverManager.getConnection(URL,"用户名","密码"); return conn; }
Connection con=DriverManager.getConnection(dbURL,user,password); //获取连接 DatabaseMetaData dbmd=con.getMetaData(); //获取DatabaseMetaData实例 System.out.println(dbmd.getDatabaseProductName()...
驱动管家DriverManager有三个功能:驱动升级、驱动备份、驱动还原!是一款针对硬件驱动管理的软件
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 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()...
Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from test"; ...
首先,需要加载 Oracle 的驱动程序,然后使用 DriverManager 获取连接对象。下面是 Oracle 数据库连接的示例代码: Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:...
Connection con = DriverManager.getConnection("jdbc:odbc:database"); Statement smt =con.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); String getpaperdata = ...
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....
robotframework+python+Appium的一个自动登录app的实例,实现app启动,自动登录,读取配置文件等
con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test2","root","root"); 连接oracle classes12.jar Class.forName( "oracle.jdbc.driver.OracleDriver" ); con = DriverManager.get...
在并发加载初始化这些驱动类的过程中产生死锁的可能性非常大,下面是一个模拟的例子,对于Thread2的实现其实是jdk里java.sql.DriverService的逻辑,也是我们第一次调用java.sql.DriverManager.registerDriver注册一...
o(2)通过DriverManager获取数据库连接 o(3)通过Connection对象获取Statement对象 o(4)使用Statement接口执行SQL语句 o(5)操作ResultSet结果集 o(6)关闭连接,释放资源 2.下面进行代码演示 1.注册数据库...