`
xixinfei
  • 浏览: 414097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为什么加载数据库驱动只用Class.forName()

 
阅读更多

终于明白为什么加载数据库驱动只用Class.forName()了!!困扰了我2个小时!!希望我写的这个东西对各位有所帮助。 

   
   在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类的代码都必须类似如下:
  public class MyJDBCDriver implements Driver {
   static {
     DriverManager.registerDriver(new MyJDBCDriver());
  }
  }
 既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。

相关 英文参考文献如下:
we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it.

分享到:
评论

相关推荐

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

    在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是加载并初始化`com.mysql.jdbc.Driver`这个数据库驱动类。在JDBC中,每个数据库驱动都会实现`java.sql.Driver`接口,并提供...

    Java Class.forName()无法加载类

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

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

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

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

    在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...

    数据库驱动jar包.rar

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

    数据库驱动jar包.zip

    Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); ``` 2. **SQL Server驱动**(sqljdbc4.jar)...

    所有数据库驱动jar包.zip

    2. 在代码中加载对应的数据库驱动,如`Class.forName("com.mysql.jdbc.Driver")`。 3. 使用`DriverManager.getConnection()`建立数据库连接。 4. 创建`Statement`或`PreparedStatement`对象,编写并执行SQL语句。 5....

    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连接驱动.zip

    在这个例子中,`Class.forName()`方法用于加载神通数据库的JDBC驱动,而`DriverManager.getConnection()`则用于创建数据库连接。这里的URL格式应根据实际数据库的设置进行调整,包括主机地址、端口号以及数据库名称...

    详解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(Driver)`方法加载驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。URL参数通常为`jdbc:mysql://localhost:3306/db_name`,其中`db_name`应替换为实际...

    java中Class.forName的作用浅谈

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

    java连接数据库驱动的代码.txt

    - `Class.forName()`:用于加载指定的数据库驱动类。 - `DriverManager.getConnection()`:根据提供的URL、用户名和密码创建一个新的数据库连接。 ##### 2. DB2数据库 DB2是IBM公司的一款关系型数据库管理系统,...

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

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

    SQL Server 2000数据库驱动包mssqlserver.jar、msutil.jar、msbase.jar

    2. 在Java代码中,使用`Class.forName()`方法加载JDBC驱动,例如`Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")`。 3. 使用`DriverManager.getConnection()`方法建立数据库连接,传入数据库URL、...

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

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

    jdbc中class.forname的作用

    总的来说,`Class.forName()` 在JDBC中的作用是加载并初始化数据库驱动,使得`DriverManager` 可以识别并管理这个驱动,进而允许我们创建数据库连接。这是一种简洁且有效的做法,也是JDBC编程的标准实践。

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

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

    mysql,sqlserver,oracle数据库驱动jar包.rar

    驱动提供了`com.mysql.jdbc.Driver`类,通过`Class.forName("com.mysql.jdbc.Driver")`加载驱动,并使用`java.sql.DriverManager.getConnection()`方法建立数据库连接。 接着是SQL Server数据库,这是微软公司推出...

Global site tag (gtag.js) - Google Analytics