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

JDBC的总结(1)----注册驱动

    博客分类:
  • JDBC
阅读更多
         考量了许久,决定把最近学的jdbc坐下总结,慢慢来吧,一天总结一小点,既然拖了那么久。

          好,下面开始总结。(这里以mysql数据库为例)

         首先就要说的是jdbc中注册驱动,首先导入对应的包,例如mysql-connector-java-5.0.8-bin.jar。

         DiverManager.class里有个属性drivers,它实际上是一个vector。可在列表中加入很多驱动,当DriverManager去取连接的时候,若果drivers里有很多驱动,它会把drivers里面的各个驱动的url和创建连接时传进来的url逐一比较,遇到对应的url,则建立连接。

         注册驱动有三种方式:

(一)DriverManager.registerDriver(new com.mysql.jdbc.Driver());
会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
具体来说就是:
1,加载的时候注册一次驱动(原因请看第三点),实例化的时候又注册一次。所以两次。
2,由于实例化了com.mysql.jdbc.Driver.class,导致必须导入该类(说白了,就是要把这个类import进去),从而具体驱动产生了依赖。不方便扩展代码。

(二)System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");
如果要注册多个驱动,则System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:com.oracle.jdbc.Driver");
虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。


(三)Class.forName("com.mysql.jdbc.Driver");
推荐这种方式,不会对具体的驱动类产生依赖。
其实这个只是把com.mysql.jdbc.Driver.class这个类装载进去,但是关键就在于,在
这个类中,有个静态块,如下:
static{
   try{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException e){
  throw new RuntimeException("can't register driver!");
}
}
就是因为这个代码块,让类在加载的时候就把驱动注册进去了!(绕了半天的圈子,其实就是为了说明这个问题,累啊!)

写了一下,自己有那么点提高,但是真的很花时间啊,坚持!
1
0
分享到:
评论
1 楼 郭定君 2011-11-13  

使用DriverManager.registerDriver(new com.mysql.jdbc.Driver())这个方法注册驱动器,并不存在驱动器被注册两次的问题,因为在com.mysql.jdbc.Driver这个类中的是forName(driver, true, ClassLoader.getSystemClassLoader()),这个方法里指定了类装载器,所以在虚拟机装载Driver对象的时候,并不会执行其静态代码块!!!

要知道,类加载有三种方式:

1. 命令行启动应用时候由JVM初始化加载
2. 通过Class.forName()方法动态加载
3. 通过ClassLoader.loadClass()方法动态加载

三种方式区别比较大,使用ClassLoader来加载类,不会执行静态代码块;使用Class.forName()来加载类,默认会执行静态代码块;用Class.forName()来加载类,并指定ClassLoader,初始化时不执行静态代码块。

这是李勇老师的Jdbc视频所造成的广泛错误理解。

相关推荐

    JDBC访问数据库的步骤

    JDBC编程步骤总结: 1. Load the Driver:Class.forName(); 2. Connect the DateBase: DriveManager.getConnection() 3. Execute the SQL: (1) Connection.createStatement() Connection.prepareStatement(sql) ...

    使用JDBC连接Mysql数据库会出现的问题总结

    首先理清几个概念: JDBC:java数据库连接,是Orical公司的指定的一套规范接口 ... (4)注册驱动  Class.forName("com.mysql.jdbc.Driver");  (5)获取连接 Connection conn = DriverManager.getConnecti

    JDBC数据库的使用操作总结

    通过数据库厂商提供的JDBC类库向DriverManager注册数据库驱动 2.使用DriverManager提供的getConnection()方法连接到数据库 3.通过数据库的连接对象的createStatement方法建立SQL语句对象 4.执行SQL语句,并将结果...

    一步一步学会JDBC

    重点说下前三步2.1注册驱动2.2.获取Connection连接:DriverManager.getConnection方法2.3.获取数据库操作对象:通过Connection接口中的方法创建对象3.JDBC完整的6步四.封装工具类五、总结 一、JDBC基本知识 是什么 ...

    java,mybiats总结

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的...

    软件工程工资管理系统

    1 注册名 字符型 10 任意字符 2 口令 字符型 10 英文字母或数字 2.2.1数据结构 工资总=(ID,编号) 管理=(用户名) 员工信息=(ID,编号) 2.2.2数据项 表2.1 数据项表 编号 标识符 类型 长度 所属表名 同义名 1 ID ...

    spring chm文档

    7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSources 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ThreadLocal目标源 7.11. 定义新的通知类型 7.12. 更多资源 8. 测试 8.1....

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.9.2. 使用元数据驱动的自动代理 7.10. 使用TargetSources 7.10.1. 热交换目标源 7.10.2. 池化目标源 7.10.3. 原型目标源 7.10.4. ThreadLocal目标源 7.11. 定义新的通知类型 7.12. 更多资源 8. 测试 8.1. 简介 8.2...

    java 面试题 总结

    1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括...

    Java连接数据库

    自己总结Java连接数据库过程和相关代码,具体有7步:(1) 导入JDBC类;(2) 装载/注册驱动程序;(3) 连接数据库;(4) 创建语句对象;(5) 执行SQL语句;(6) 处理结果;(7) 关闭连接。

    Spring API

    3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource ...

    Spring中文帮助文档

    3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource ...

    21天学通Java-由浅入深

    第一篇 基础篇 第1章 Java简介(精彩视频:33分钟) 21 1.1 Java的平台简介 21 1.2 安装工具包 22 1.2.1 下载JDK 22 1.2.2 安装JDK 24 1.2.3 查看与设置环境变量 25 1.2.4 JDK常用命令 27 1.2.5 Java各个目录含义 28...

    Mybatis快速上手

    Mybatis是一款优秀的持久层框架,它是用Java语言编写的,它封装了JDBC操作的很多细节,使用了ORM思想实现了结果集的封装,使得开发者只需要关注SQL语句本身,而无需关注注册驱动、创建连接等繁杂过程。

    Spring 2.0 开发参考手册

    1. 简介 1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加...

    Java面试宝典2010版

    21、注册Jdbc驱动程序的三种方式 109 22、用JDBC如何调用存储过程 109 23、JDBC中的PreparedStatement相比Statement的好处 110 24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么...

    Spring3.x企业应用开发实战(完整版) part1

    15.2 注解驱动的控制器 15.2.1 使用@RequestMapping映射请求 15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据...

    Spring.3.x企业应用开发实战(完整版).part2

    15.2 注解驱动的控制器 15.2.1 使用@RequestMapping映射请求 15.2.2 请求处理方法签名概述 15.2.3 处理方法签名详细说明 15.2.4 使用HttpMessageConverter 15.2.5 处理模型数据 15.3 处理方法的数据绑定 15.3.1 数据...

Global site tag (gtag.js) - Google Analytics