`

为什么要用Class.forName加载数据库驱动,到底运行了什么东东

阅读更多

   在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。
    这里有必要提一下就是Class下的newInstance()和new有什么区别?,首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制。
    好,到此为止,我们总结如下:
    Class.forName("")返回的是类
    Class.forName("").newInstance()返回的是object
    有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
    刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:

显示代码打印
1 public class MyJDBCDriver implements Driver { 

2   static { 

3     DriverManager.registerDriver(new MyJDBCDriver()); 

4  } 

5  }


  既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20081013/150473.html

分享到:
评论

相关推荐

    Java Class.forName()无法加载类

    NULL 博文链接:https://listen-raining.iteye.com/blog/1894456

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

    Java中的`Class.forName()`方法是一个非常关键的工具,主要用于动态加载类。它的作用在于根据给定的类全名(包括包名)返回对应的`Class`对象。`Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过...

    class literal & instance.getClass() & Class.forName(String className)

    `Class.forName()`经常用于配置文件或者数据库驱动加载等场景,因为这些情况需要在程序运行时才知道要加载的具体类。 总结一下,这三个概念在Java开发中扮演着不同的角色: 1. Class literal (`ClassName.class`) ...

    greenplum.jar(gp数据库驱动jar包)

    1. **导入驱动**:在 Java 代码中,首先需要加载并注册 Greenplum 的 JDBC 驱动,通常通过 `Class.forName()` 方法实现。 ```java Class.forName("com.greenplum.jdbc.gpdb.GPDBDriver"); ``` 2. **建立连接**:使用...

    在Java的反射中,Class.forName和Class

    当你的应用程序需要在运行时才知道要使用哪个类,或者想要延迟加载某个类以提高性能时,`Class.forName`就非常有用。它不仅加载类,还会初始化这个类,即执行静态初始化块。例如,如果你有一个名为`...

    java连接数据库驱动加载

    在建立连接时,首先需要通过`Class.forName(Driver)`方法加载驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。URL参数通常为`jdbc:mysql://localhost:3306/db_name`,其中`db_name`应替换为实际...

    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:...

    详解Java动态加载数据库驱动

    Java动态加载数据库驱动是解决在同一个系统中需要与多种数据库版本进行交互问题的一种技术手段。在实际开发中,由于各种项目可能需要连接不同类型的数据库,如Oracle、SQL Server等,或者同一种数据库的不同版本,...

    MySQL 5.7版本以上数据库的连接驱动jar包

    这是MySQL 5.7版本以上数据库的连接驱动jar包,对应加载驱动程序代码: Class.forName("com.mysql.cj.jdbc.Driver"); 该驱动包适用于Java web开发,连接MySQL数据库时导入工程。 参考代码: Class.forName(...

    java中Class.forName的作用浅谈

    在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    java于各种数据库连接额语句

    - **Class.forName()**:加载指定的JDBC驱动类。 - **newInstance()**:创建一个实例对象。 - **getConnection()**:使用URL、用户名和密码获取数据库连接。 - **URL格式**:`jdbc:oracle:thin:@主机地址:端口号:...

    Java Class.forName()用法和newInstance()方法原理解析

    Class.forName()方法的用法可以分为两种,一种是使用Class.forName()方法加载类,然后使用newInstance()方法实例化该类,另一种是使用new关键字实例化类。两种方法的效果是一样的,但是它们的实现机制不同。Class....

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

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

    Java 实现的面向接口的动态加载驱动的方法

    当应用程序需要连接到数据库时,无需直接引用具体的数据库驱动类,而是通过`Class.forName()`方法加载驱动的类名,JVM会根据这个名字找到对应的类并实例化。这样做的好处在于,开发者可以在部署应用时自由更换数据库...

    java数据库驱动包

    2. 加载对应的数据库驱动,通常使用`Class.forName()`方法。 3. 创建数据库连接,使用`DriverManager.getConnection()`方法,输入数据库URL、用户名和密码。 4. 获取Statement或PreparedStatement对象,用于执行SQL...

    数据库jdbc驱动加载过程

    在 JDBC 4.0 版本中,不再需要使用 Class.forName() 方法来显式加载 JDBC 驱动程序。这是因为 JDBC 4.0 版本引入了 Java SPI 机制来加载驱动程序。 当我们执行 DriverManager.getConnection() 方法时,JVM 会加载 ...

    Java中数据库驱动程序加载及建立连接代码

    Class.forName("oracle.jdbc.driver.OracleDriver"); // 建立数据库连接 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String username = "your_username"; String password = "your_password"; ...

    jdbc中class.forname的作用

    在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`com.mysql.jdbc.Driver` 类。当我们连接到数据库时,必须确保对应的数据库驱动已经被加载到Java虚拟机(JVM)中,以便能够正确地与数据库进行通信...

    java连接各种数据库的驱动 jar包

    使用`Class.forName()`方法加载驱动,然后通过`DriverManager.getConnection()`创建连接。 2. **Oracle数据库驱动**: 对于Oracle数据库,你需要`ojdbc.jar`或`ojdbc6.jar`等驱动。同样,将其加入到项目类路径后,...

Global site tag (gtag.js) - Google Analytics