`

DriverManager.getConnection后发生了什么

    博客分类:
  • JAVA
阅读更多
以前只是知道如果需要进行数据库连接,需要按照
  Connection connection = null;
  try {
   Class.forName("com.mysql.jdbc.Driver");
   try {
     connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/platform","root","admin");
    } catch (SQLException e) {
      System.out.println("Problem getting connection"+ e);
    }
  } catch (ClassNotFoundException e) {
     System.out.println("Couldn't find driver"+e);
  } finally {
   try {
    if (connection != null) {
     connection.close();
    }
   } catch (SQLException e) {
     System.out.println("Problem closing connection"+e);
   }
  }
 }
之后到底发生了什么不是很了解,今天查询了一下jdk的源代码,终于搞清楚了怎么回事,
在我们Class.forName的时候注册的是Driver的实现类,在API文档中如下写了Driver的作用
“在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序”
那如何才能自动注册呢,有一点需要注意的就是Class.forName就可以注册,只能将注册信息添加到静态代码中,所有Driver代码的实现类中都采用了 
    static {
        try {
            DriverManager.registerDriver(new ProxoolDriver());
        } catch (SQLException e) {
            System.out.println(e.toString());
        }
    }
这种方式进行注册,这样在Class.forName的时候就会执行上面的代码,也就想系统注册驱动程序,注册驱动程序就是他会组装DriverInfo后缓存到DriverManager中,便于后面进行处理
然后开始取得数据库连接,这个时候他会匹配注册的所有的驱动,查询合适的驱动程序
    首先判断是否又加载驱动的权限,如果没有,匹配下一个.
    然后调用调用Driver的connect方法,如果返回null或者抛出异常,匹配下一个
    最后匹配到合适的驱动,调用驱动对象的connect方法进行连接,如果没有将会提示没有合适的驱动.
这就要求编写驱动的connect方法一开始最好进行url的有效性校验,只是处理自己要求的驱动url
注意采用了一个native的callerClassLoader来盘点是否又权限加载Driver
按照上面的原理我们可以自己写驱动程序了。
分享到:
评论

相关推荐

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

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

    JDBC DriverManager.registerDriver(new Driver());

    注册驱动后,当调用`DriverManager.getConnection()`方法创建数据库连接时,JDBC会遍历已注册的驱动,找到能处理给定URL的驱动,并使用它来建立连接。 除了手动注册驱动,现代的JDBC驱动通常采用自动注册机制,通过...

    神通数据库连接oscarJDBC.jar

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

    Java 连接多种数据库代码参考

    Connection conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } ``` **关键点说明:** - 需要加载Oracle的JDBC驱动类`oracle.jdbc.driver.OracleDriver`...

    java连接AmericanascII7字符集oracle例子

    Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@//<数据库服务器>:<端口号>/<服务名>", "<用户名>", "<密码>"); ``` 这里的`<数据库服务器>`、`<端口号>`、`<服务名>`、`<用户名>`和`...

    数据库访问BaseDao类

    con = DriverManager.getConnection(DBURL, "", ""); // 带入路径,无帐号密码 // conn=DriverManager.getConnection(DBURL, DBNAME, DBPASS); System.out.println("数据库连接成功"); } catch ...

    JDBCTM 指南:入门3 – DriverManager

    对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法是 DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。JDBC 允许用户调用 DriverManager 的方法 getDriver、getDrivers 和 ...

    JDBC常用的数据库连接.doc

    3. 调用`DriverManager.getConnection()`建立连接:`cn=DriverManager.getConnection("jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName",sUsr,sPwd);` 其中,`MyDbComputerNameOrIP`应替换为实际的数据库...

    各种数据库的连接方法

    以上就是各种数据库的连接方法,每种方法都需要正确加载对应的JDBC驱动,并根据具体的数据库信息构造连接URL,然后通过`DriverManager.getConnection()`方法获取数据库连接。确保这些步骤正确无误,才能顺利地在Java...

    java开发中常用数据库JDBC连接写法.docx

    Connection cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd ); ``` 2. **PostgreSQL** 对于PostgreSQL,需要`pgjdbc2.jar`。同样地,加载驱动...

    各种数据库的java链接

    - **建立连接**:通过`DriverManager.getConnection()`方法建立数据库连接。 示例代码: ```java Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:...

    使用JDBC连接各种数据库总结

    - Informix:`Connection conn = DriverManager.getConnection("jdbc:informix-sqli://localhost:1533/testDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword")` - Sybase:使用`Properties`对象...

    jdbc连接全解

    Connection con = DriverManager.getConnection("jdbc:postgresql://host:port/database", "user", "password"); ``` - **DB2** ```java Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); String url = ...

    JAVASQL连接

    每种数据库的连接方式略有不同,但核心思路相似,都是通过加载相应的JDBC驱动,然后调用`DriverManager.getConnection()`方法来建立连接。在实际应用中,还需注意数据库驱动的版本兼容性,以及数据库连接字符串的...

    java连接oracle,db2,MySQL,sqlserver等数据库的方式.pdf

    在上述所有示例中,`Class.forName()`方法用于加载对应的数据库驱动类,`newInstance()`创建驱动实例,`DriverManager.getConnection()`则用于建立实际的数据库连接。确保已将相应的JDBC驱动添加到项目的类路径中,...

    jdbc各种连接实例

    Connection conn = DriverManager.getConnection(url, user, password); ``` 2. **DB2 数据库** 对于DB2,需要加载对应的IBM DB2驱动,并设置数据库URL、用户名和密码来获取连接。 ```java Class.forName(...

    各种数据库JDBC连接代码

    需要注意的是,随着JDBC的发展,现在的连接方式通常推荐使用 `java.sql.Connection` 接口的静态方法 `DriverManager.getConnection()` 直接获取连接,而不再需要显式地加载驱动。例如,对于Oracle数据库,新的连接...

    JDBC所有链接数据库写法

    以上就是通过JDBC连接各种主流数据库的方法总结,每种数据库的连接细节虽有差异,但核心原理一致,都是通过加载特定的JDBC驱动,并调用`DriverManager.getConnection()`方法来实现。掌握这些基本的连接代码,将极大...

Global site tag (gtag.js) - Google Analytics