最近在看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`是JDBC(Java Database Connectivity)的核心组件,主要负责管理数据库驱动程序并建立数据库连接。它的功能包括跟踪已注册的驱动程序、处理登录限制以及创建与数据库的连接。`DriverManager`...
虽然`DriverManager`类本身并不直接提供日志记录功能,但我们可以利用其方法来间接控制日志输出。在本文中,我们将深入探讨如何借助`DriverManager`和其他相关工具来实现这一目标。 首先,`DriverManager`类主要...
在Java数据库连接(JDBC)中,`DriverManager.registerDriver(new Driver())` 是一个关键的步骤,用于将数据库驱动程序注册到JDBC的`DriverManager`中,以便后续的数据库连接操作。这个过程通常在应用程序启动时进行...
GYWDK-DriverManager是一个专为Windows操作系统设计的动态链接库(DLL),它提供了一种接口来管理和操作驱动程序。该库主要包含两个导出函数,用于与驱动相关的操作,如安装、启动、停止和卸载。以下是这两个关键...
内容: 3 – DriverManager3.1 概述DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间...
驱动管家DriverManager v1.0中文绿色免费版是一款专为用户设计的系统工具,主要功能集中在硬件驱动程序的管理上,包括驱动升级、驱动备份和驱动还原三个方面。这些功能对于保持计算机系统的稳定性和优化硬件性能至关...
import java.sql.DriverManager; import java.sql.SQLException; ``` 2. 注册JDBC驱动: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ``` 3. 创建数据库连接: ```java Connection conn =...
1. 连接到SQL Server数据库:通过`DriverManager.getConnection()`方法,输入服务器名、数据库名、用户名和密码来建立连接。 2. 创建Statement或PreparedStatement对象:用于执行SQL查询和命令。 3. 执行SQL语句:...
神通数据库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()...
3. 使用`DriverManager.getConnection()`方法创建数据库连接。 4. 编写SQL语句并使用Statement或PreparedStatement对象执行。 5. 处理结果集(ResultSet)并关闭资源。 理解并正确使用这些驱动对于开发跨平台的...
Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); String sql = "SELECT * FROM ...
DriverManager 类包含一列 Driver 类,它们已通过调用方法 DriverManager.registerDriver 对自己进行了注册。所有 Driver 类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时 DriverManager 类进行...
mongodb-jdbc mongodb java jdbc驱动=============== public static void main(String args [])抛出... 连接c = DriverManager.getConnection(jdbcurl,username,password); 语句st = c.createStatement(); prin
然而,JDBC还提供了其他几个方法供用户使用,如`DriverManager.getDriver`、`DriverManager.getDrivers`和`DriverManager.registerDriver`,以及`Driver`类的`connect`方法。尽管如此,在多数场景下,让`...
- **DriverManager.getDriver()**:返回一个能够处理给定数据库URL的`Driver`对象,但通常不建议直接使用,而是让`DriverManager`自行管理连接细节。 - **DriverManager.getDrivers()**:返回当前注册的所有驱动程序...
首先,需要加载 Oracle 的驱动程序,然后使用 DriverManager 获取连接对象。下面是 Oracle 数据库连接的示例代码: Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:...
通过实现这个接口,驱动程序能够被`java.sql.DriverManager`类识别和管理,从而实现动态加载和使用。 #### 二、DriverManager类 `DriverManager`类是JDBC框架的核心组件之一,负责管理数据库驱动程序的注册和连接...