数据库驱动为什么要使用Class.forName()

数据库驱动为什么要使用Class.forName(),第1张

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便 *** 作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。

Class.forName("")返回的是类

Class.forName("").newInstance()返回的是object

刚才提到,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.总结:jdbc数据库驱动程序最终的目的,是为了程序员能拿到数据库连接,而进行jdbc规范的数据库 *** 作。拿到连接的过程是不需要你自己来实例化驱动程序的,而是通过 DriverManger.getConnection(string str)。因此一般情况下,对于程序员来说,除非特别需求,是不会自己去实例化一个数据库驱动使用里面的方法的。

是为了声明当前用的是哪个数据库驱动,以及将驱动注册到驱动管理器里面以sqlserver为例

你除了可以用Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance()来实现对数据库驱动的声明,你还可以用DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver())来实现同样的效果

你可以反编译SQLServerDriver.class来看一下,他在被实例化的时候会调用BaseDriver.registerDriver(new SQLServerDriver())方法,来将自己注册到驱动管理器 里面

然后你取得数据库连接的时候不是需要调用DriverManager.getConnection(url,username,password)方法么,只有注册了驱动,系统才知道你连接的是什么数据库,用哪个驱动程序.

sqlServer版本是什么

2000加载驱动和URL的语句是

String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"

String dbURL = "jdbc:microsoft:sqlserver://localhost:1433DatabaseName=XXX"

SQL Server 2005 中加载驱动和URL的语句是

String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"

String dbURL = "jdbc:sqlserver://localhost:1433DatabaseName=XXX"

如果写法错误将会找不到驱动。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9662400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存