`
hsyzijvaa
  • 浏览: 111809 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[]使用JDBC时Class.forName()的作用

    博客分类:
  • java
阅读更多
    使用jdbc时,我们都会很自然得使用下列语句:
class.forname("com.mysql.jdbc.driver");    string url = "jdbc:mysql://127.0.0.1/test?useunicode=true&characterencoding=utf-8";    string user = "";    string psw = "";    connection con = drivermanager.getconnection(url,user,psw); 
 

   一定要有这一句吗?不是的,我们完全可以用这样一句代替它:


com.mysql.jdbc.driver driver = new com.mysql.jdbc.driver();    //or:    //new com.mysql.jdbc.driver();    string url = "jdbc:mysql://127.0.0.1/test?useunicode=true&characterencoding=utf-8";    string user = "";    string psw = "";    connection con = drivermanager.getconnection(url,user,psw);  
 
  


    大家可能都看出个大概来了,我们只需要在调用drivermanager的getconnection方法之前,保证相应的driver类已经被加载到jvm中,并且完成了类的初始化工作就行了,而具体是怎样实现这个功能却是没有讲究的。上面两种方法都可以实现这个功能,因此程序可以正常运行。注意了,如果我们进行如下操作,程序是不能正常运行的,因为这样仅仅使driver类被装载到jvm中,却没有进行相应的初始化工作。

com.mysql.jdbc.driver driver = null;    //or:    classloader cl = new classloader();    cl.loadclass("com.mysql.jdbc.driver");   

     我们都知道jdbc是使用bridge模式进行设计的,drivermanager就是其中的abstraction,java.sql.driver是implementor,com.mysql.jdbc.driver是implementor的一个具体实现(请参考gof的bridge模式的描述)。大家注意了,前一个driver是一个接口,后者却是一个类,它实现了前面的driver接口。
     bridge模式中,abstraction(drivermanager)是要拥有一个implementor(driver)的引用的,但是我们在使用过程中,并没有将driver对象注册到drivermanager中去啊,这是怎么回事呢?jdk文档对driver的描述中有这么一句:
     when a driver class is loaded, it should create an instance of itself and register it with the drivermanager
哦,原来是com.mysql.jdbc.driver在装载完后自动帮我们完成了这一步骤。源代码是这样的:

java 代码
package com.mysql.jdbc       public class driver extends nonregisteringdriver implements java.sql.driver {     // ~ static fields/initializers     // --------------------------------------------- //     // register ourselves with the drivermanager     //     static {        t ry {                  java.sql.drivermanager.registerdriver(new driver());              } catch (sqlexception e) {                  throw new runtimeexception("can't register driver!");              }      }    // ~ constructors     // -----------------------------------------------------------    /**     * construct a new driver and register it with drivermanager     *      * @throws sqlexception     *             if a database error occurs.     */    public driver() throws sqlexception {         // required for class.forname().newinstance()     }    }   
 
0
0
分享到:
评论

相关推荐

    java中Class.forName方法的作用详解

    总的来说,`Class.forName()`在Java中起到了动态加载和初始化类的关键作用,尤其在JDBC和其他需要延迟加载或动态选择实现的场景中。了解这个方法的工作原理,对于理解Java程序的运行机制和优化代码是十分重要的。在...

    jdbc中class.forname的作用

    在Java JDBC编程中,`Class.forName()` 方法起着至关重要的作用。它的主要任务是动态加载指定的类并执行其实例的静态初始化块。在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`...

    sun.jdbc.odbc.JdbcOdbcDriver.zip

    使用JDBC-ODBC桥之前,开发者需要在系统中设置合适的ODBC数据源,然后在Java代码中通过"Class.forName()"加载驱动并建立数据库连接。 总结来说,"sun.jdbc.odbc.JdbcOdbcDriver.zip"是一个包含Java的JDBC-ODBC桥的...

    sun.jdbc.odbc.jdbcodbcdriver-Maven.zip

    在Java的早期版本中,这个类位于`sun.jdbc.odbc`包下,可以直接通过Class.forName()方法加载并注册到JDBC驱动管理器,例如: ```java Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); ``` 然后,通过创建适当的URL...

    sun.jdbc.odbc.JdbcOdbcDriver下载

    jdbc-odbc驱动包,提示找不到驱动,java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver, 原因:从jdk从1.8开始,删除了jdbc-odbc桥,所以odbc的驱动是用不了的 解决方法:这里为提供一个解决JDK1.8不...

    Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'

    通常,我们使用`Class.forName()`方法来加载驱动,例如: ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ``` 如果这个方法抛出ClassNotFoundException,表示驱动类没有找到。 4. **...

    Oracle数据库的JDBC驱动包

    其中classes12.jar是从oracle安装目录中获取的,使用它编写java程序连接oracle时,驱动包的加载路径为"oracle.jdbc.driver.OracleDriver",即Class.forName("oracle.jdbc.driver.OracleDriver")。另一个ojdbc6.jar的...

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    当我们使用JDBC操作MySQL数据库时,通常会在代码中看到`Class.forName("com.mysql.jdbc.Driver")`这一行,这行代码的作用是至关重要的,但很多人可能并不清楚为什么要这样做。本文将深入探讨这个问题,以及其背后的...

    Dm7JdbcDriver16.jar Dm7JdbcDriver17.jar Dm7JdbcDriver18.jar

    要使用这些驱动,首先需要在Java程序中引入对应的jar文件,然后通过Class.forName()加载驱动,使用DriverManager.getConnection()建立连接,例如: ```java Class.forName("com.dameng.jdbc.DmDriver"); ...

    jdbc驱动程序实例

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库的SID String user = "test"; String password = "test"; Connection ...

    DmJdbcDriver,达梦数据库maven版本,dm.jdbc.driver.DmDriver

    这里,`url`是数据库服务器的地址,`username`和`password`是数据库登录凭证,`driver-class-name`则指定了达梦数据库的JDBC驱动类。 标签中的"数据库"表明了这是一个关于数据库管理系统的讨论,"java"意味着我们...

    sqlite jdbc jar java jdbc 链接 sqlite sqlite-jdbc-3.8.11.1.jar

    这通常通过 `Class.forName()` 方法完成,告诉 Java 使用哪个驱动来处理 SQLite 数据库的连接: ```java Class.forName("org.sqlite.JDBC"); ``` 2. **创建连接**:使用 `DriverManager.getConnection()` 方法...

    sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar三个包

    1. **导入驱动**: 在Java代码中,你需要通过`Class.forName()`方法加载JDBC驱动。 2. **建立连接**: 使用`DriverManager.getConnection()`方法,提供数据库URL、用户名和密码来创建一个`Connection`对象。 3. **创建...

    com.mysql.cj.jdbc.Driver.zip

    Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); ``` 3. **`mysql-connector-java-8.0.27....

    java连接多种数据库的驱动

    java连接各种数据库的驱动 jar包 orale: Class.forName("oracle.jdbc.driver.OracleDriver"); mysql:Class.forName("com.mysql.jdbc.Driver"); access:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); sqlsever:...

    hana jdbc ngdbc.jar com.sap.db.jdbc.Driver

    2. 在代码中使用 `Class.forName()` 方法加载驱动类,例如:`Class.forName("com.sap.db.jdbc.Driver")`。 3. 使用 `DriverManager.getConnection()` 创建数据库连接,提供 HANA 数据库的 URL、用户名和密码,如:`...

    JDBC驱动8.0.25JAR.zip

    1. 加载驱动:使用`Class.forName()`方法加载特定的JDBC驱动类。 2. 创建连接:通过`DriverManager.getConnection()`方法,传入数据库URL、用户名和密码来建立连接。 3. 获取Statement或PreparedStatement对象:根据...

    SQL Server_JDBC驱动【mssql-jdbc-6.4.0.jre8.jar】.rar

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection(url, username, password); System.out.println("Connected to the database!"); // 执行...

    sqlite-jdbc-3.8.7.jar下载

    首先,需要加载驱动(`Class.forName("org.sqlite.JDBC")`),然后使用数据库URL(如`jdbc:sqlite:/path/to/database.db`)建立连接。 ```java import java.sql.Connection; import java.sql.DriverManager; ...

    sqlite-jdbc-3.32.3.2.jar-支持信创环境loongarch64、mips64el

    Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/your/database.db"); ``` 一旦连接建立,开发者就可以执行SQL查询,创建表,插入数据,以及进行其他常见...

Global site tag (gtag.js) - Google Analytics