JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型
JDBC 有四种驱动类型,分别是:
- JDBC-ODBC 桥(JDBC-ODBC bridge driver plus ODBC driver)
- 本地 API 驱动(Native-API partly Java driver)
- 网络协议驱动(JDBC-Net pure Java driver)
- 本地协议驱动(Native-protocol pure Java driver)

1. JDBC-ODBC 桥
从名称之中就可以知道,这种驱动是 JDBC 在 ODBC 已有的功能上做了一层适配工作,即搭桥(Bridge)。
这种驱动完全依赖 ODBC 的实现,JDBC 只是做了一层封装工作。
JDBC-ODBC 桥最主要的功能,是支持 Java 访问 Access 这种伪关系型数据库。
JDBC-ODBC 桥最大的优点在于:ODBC 的代码在天然的在许多使用数据库的客户端上有,所以这种驱动的安装十分便捷。
但是,JDBC-ODBC 桥有以下两个主要的缺点:
- 由于对 ODBC 的依赖,导致支持的功能有限,性能不佳,扩展能力很弱。
- 不适合在并发访问数据库的情况下使用。
在 Java8 的实现中,已经删除了 JDBC-ODBC 桥这种驱动方式。
2. 本地 API 驱动
这种驱动方式,相当于 JDBC 完全使用了 ODBC 的工作方式。
在这种驱动中,JDBC调用转换为对 DBMS 的客户端 API 的调用。
JDBC-ODBC 桥的驱动方式,等于是对所有的数据库调用进行了一次整合;而本地 API 驱动则是绕过了 ODBC,对数据库 API 的调用进行了整合。
所以这种驱动方式的效率,相比第一种驱动,会有显著的提高。
然而,与 JDBC-ODBC 桥驱动相同,对客户端数据库的 API 有依赖,所以也不适合基于 Internet 的应用。
3. 网络协议驱动
这种驱动方式,适用于基于 Internet 的应用,它依赖于一个网络服务器上的中间产品:
- 首先,将 JDBC 调用转化为一个 DBMS 无关的网络协议,传递给中间服务器。
- 然后,中间服务器负责将这种请求,转化为符合相应的数据库规范的请求,转发给数据库服务器。
这种驱动是基于 Server 端的,所以不需要在客户端加载数据库厂商的代码库。
它在在执行效率,可升级性,灵活性方面都很好。
这种驱动,设计的代码量很小,可以很快地加载到内存当中。
但是,这种驱动在中间件层仍然需要有配置其它数据库驱动程序,而且增加了一个中间层去传递数据,执行效率还不是最好。
同时,基于 Internet 的访问要求,客户端必须处理 Web 所提出的安全性、通过防火墙的访问等方面的额外要求。
4. 本地协议驱动
这种驱动程序将 JDBC 调用直接转换为 DBMS 使用的网络协议。
这种驱动允许从客户端机器直接调用 DBMS 服务器,是内部网(Intranet)访问的优秀解决方案。
由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源。
5. 总结
- JDBC-ODBC 桥,适合作为开发应用时的一种过度方案,不使用大量的数据库操作。
- 本地 API 驱动,只适用于内部网,但是执行效率不高,所以一般也不采用。
- 网络协议驱动,适用于需要同时连接多个不同种类的数据库的应用。
- 本地协议驱动,适合于连接单一数据库的应用。
从执行效率来讲,第3、4型的驱动是首选,平时通过加载一个 jar 包来达到连接数据库目的的,是第4型驱动。
JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型的更多相关文章
- JDBC学习1:详解JDBC使用
什么是JDBC JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java ...
- JDBC学习笔记二
JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...
- JDBC 学习笔记(十一)—— JDBC 的事务支持
1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...
- JavaScript学习笔记-实例详解-类(二)
实例详解-类(二) //===给Object.prototype添加只读\不可枚举\不可配置的属性objectId(function(){ Object.defineProperty(Object ...
- Angular6 学习笔记——组件详解之组件通讯
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- Angular6 学习笔记——组件详解之模板语法
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- Angular6 学习笔记——路由详解
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- JavaScript学习笔记-实例详解-类(一)
实例详解-类(一): //每个javascript函数(除了bind())都自动拥有一个prototype对象// 在未添加属性或重写prototype对象之前,它只包含唯一一个不可枚举属性const ...
- Android学习笔记-Dialog详解
1.对话框的使用 1.1AlertDialog的显示 简单对话框以及监听的设置:重点掌握三个按钮(也就是三上单词): PositiveButton(确认按钮);NeutralButton(忽略按钮) ...
随机推荐
- 摘自 dd大牛的《背包九讲》
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...
- Ball Coloring
6552: Ball Coloring 时间限制: 1 Sec 内存限制: 128 MB提交: 13 解决: 7[提交][状态][讨论版][命题人:admin] 题目描述 There are N ...
- docker-企业级镜像仓库harbor
Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色 ...
- 《队长说得队》【Alpha】Scrum meeting 5
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...
- vue-awesome-swiper插件爬坑
最近自己在做一个基于vue的知乎的移动端单页面,遇到很多坑,先说一下遇到最大的坑,其实并不推荐使用 vue-awesome-swiper,如果项目应用轮播,切换少的话.言归正传,现在来介绍vue-aw ...
- NOIP模拟赛 水灾
大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上 ...
- Linux下打包解压命令
tar 压缩: tar -cvjpf etc.tar.bz2 /etc //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具 ...
- Python使用gevent实现协程
Python中多任务的实现可以使用进程和线程,也可以使用协程. 一.协程介绍 协程,又称微线程.英文名Coroutine.协程是Python语言中所特有的,在其他语言中没有. 协程是python中另外 ...
- Django与多个数据库交互
定义数据库 在Django中使用多个数据库的第一步是告诉Django您将要使用的数据库服务器. 数据库可以有您选择的任何别名.但是,别名 default 有着特殊的意义.Django使用别名为 def ...
- Python9-进程池-day38
复习 # 信号量 from multiprocessing import Semaphore # 用锁的原理实现的,内置了一个计数器 # 在同一个事件,只能有指定数量的进程执行某一段被控制住的代码 # ...