jdbc加载驱动 Class.forName()的作用
来源:互联网 发布:悟空crm 旗舰版 源码 编辑:程序博客网 时间:2024/05/21 09:31
在学习jdbc时,我们首先学到的是最简单的helloWorld入门,但是为什么要这样呢 ?
//注册驱动Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql:///zfx?characterEncoding=UTF-8";//获取连接Connection conn = DriverManager.getConnection(url, "root", "root");//数据库操作对象Statement statement = conn.createStatement();//执行sqlResultSet resultSet = statement.executeQuery("select * from student");while(resultSet.next()){String name = resultSet.getString("name");
Java.sql.Driver
Java.sql.Connection
Java.sql.Statement
Java.sql.ReslutSetjava连接数据库最重要的就是这四个类,所有数据库厂商,如果要用java连接数据库必须实现这四个类
如上图所示,大家可能都看出个大概来了,我们只需要在调用DriverManager的getConnection方法之前,保证相应的Driver类已经被加载到jvm中,并且完成了类的初始化工作就行了,而具体是怎样实现这个功能却是没有讲究的。上面两种方法都可以实现这个功能,因此程序可以正常运行。注意了,如果我们进行如下操作,程序是不能正常运行的,因为这样仅仅使Driver类被装载到jvm中,却没有进行相应的初始化工作。
com.mysql.jdbc.Driver driver = null; //or: ClassLoader cl = new ClassLoader(); cl.loadClass("com.mysql.jdbc.Driver");
其实我们只要看一下mysql 实现 Java.sql.Driver这个接口时,初始化做的工作就一目了然了
package com.mysql.jdbc;import java.sql.DriverManager;import java.sql.SQLException;public class Driver extends NonRegisteringDriver implements java.sql.Driver{ public Driver() throws SQLException { } static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }}
所以我们完全可以将
Class.forName("com.mysql.jdbc.Driver");换成
DriverManager.registerDriver(new Driver());
但是并不建议这么做,因为 第一种的好处是:Class.forName依赖的是字符串,而不是具体类,所以,可以通过配置文件修改连接哪一个数据库。
是不是明白了 ? 就是在静态代码块里向驱动管理器DriverManager注册了驱动,就是这么简单喽
0 0
- jdbc加载驱动 Class.forName()的作用
- JDBC采用Class.forName加载驱动的意义
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- JDBC Class.forName语句的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时 Class.forName()的作用
- 使用JDBC时Class.Forname()的作用
- JDBC中Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- 使用JDBC时Class.forName()的作用
- Javascript Browser Window对象方法详解
- NYOJ 123 树状数组 (区间更新,单点访问)/(插线问点)
- linux下vim中文乱码的解决方法
- UVa 11992 Fast Matrix Operations
- easyui datagrid 设置可编辑行
- jdbc加载驱动 Class.forName()的作用
- ubuntu的一些使用技巧
- shell时间处理整理
- NAT(网络地址转换器)&UDP打洞
- ECSHOP因PHP版本导致的错误
- 安卓布局中的一点经验
- IntelliJ IDEA 配置SDK
- uCOS内存管理
- ios 横分割线 纵分割线