一下内容引用自http://wiki.jikexueyuan.com/project/jdbc/drive-types.html

一、什么是JDBC驱动程序?

JDBC驱动实现了JDBC API中定义的接口,该接口用于与数据库服务器进行交互。

例如,使用JDBC驱动程序可以打开数据库连接,并通过发送SQL或数据库命令,然后通过Java接收结果。

java.sql包中附带的JDK,包含了定义各种类与他们的行为和实际实现,这些类都在第三方驱动程序中完成。第三方供应商在他们的数据库驱动程序中都实现了java.sql.Driver接口。

二、JDBC驱动程序类型

JDBC驱动程序的实现,因为各种各样的操作系统和Java运行在硬件平台的不同而不同。Sun公司将实现类型分为四类:类型1,2,3,4,其解释如下:

1、类型1:JDBC-ODBC桥驱动程序:

在类型1驱动程序中,一个JDBC桥接器是用来访问安装在每个客户机上的ODBC驱动程序。为了使用ODBC,需要在目标数据库上配置系统数据源名称(DSN)。

当Java刚出来时,这是一个很有用的驱动程序,因为大多数的数据库只支持ODBC访问,但现在此类型的驱动程序仅适用于实验用途或在没有其他选择的情况。

自带JDK 1.2中的JDBC-ODBC桥是这类驱动程序的一个很好的例子。

2、类型2:JDBC-Native API

在类型2驱动程序中,JDBC API调用转换成原生的C/C++ API调用,这对于数据库来说具有唯一性。这些驱动程序通常由数据库供应商提供,并和JDBC-ODBC桥驱动程序同样的方式使用。该供应商的驱动程序必须安装在每台客户机上。

如果改变了当前数据库,必须改变原生API ,因为它是具体到某一个数据库,并且他们大多已经失效了。即使这样用类型2驱动程序也能提高一些速度,因为他消除了ODBC的开销。

Oracle调用接口(OCI)驱动程序是一个类型2驱动程序的示例。

3、类型3:JDBC-Net纯Java

在类型3驱动程序中,一般用三层方法来访问数据库。JDBC客户端使用标准的网络套接字与中间件应用服务器进行通信。套接字的相关信息被中间件应用服务器转换为数据库管理系统所要求的的调用格式,并转发到数据库服务器。

这种驱动程序是非常灵活的,因为它不需要在客户端上安装代码,而且单个驱动程序能提供访问多个数据库。

可以将应用服务器作为一个JDBC“代理”,这意味着它会调用客户端应用程序。因此,需要一些有关服务器配置方面的知识,这样可以高效地使用此驱动程序类型。

应用服务器可能使用类型1,2,或4驱动程序与数据库进行通信,了解它们的细微之处将会很有帮助。

4、类型4:100%纯Java

在类型4驱动程序中,一个纯粹的基于Java的驱动程序通过socket连接与供应商的数据库进行通信。这是可用于数据库的最高性能的驱动程序,并且通常由供应商自身提供。

这种驱动器是非常灵活的,不需要在客户端或服务端上安装特殊的软件。此外,这些驱动程序是可以动态下载的。

MySQL Connector/J的驱动程序是一个类型4驱动程序。因为它们的网络协议的专有属性,数据库供应商通常提供类型4的驱动程序。

三、该使用哪种驱动程序?

如果正在访问一个数据库,如Oracle,Sybase或IBM,首选的驱动程序是类型4。

如果Java应用程序同时访问多个数据库类型,类型3是首选的驱动程序。

类型2驱动程序是在数据库没有提供类型3或类型4驱动程序时使用的。

类型1驱动程序不被认为是部署级的驱动程序,它存在的目的通常仅用于开发和测试。

JDBC驱动类型的更多相关文章

  1. JDBC驱动的四种类型

    Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥.本地API驱动.网络协议驱动和本地协议驱动. JDBC驱动类型一.JDBC-ODBC桥 JDBC-ODBC 桥 是sun公司提供的, ...

  2. JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型

    JDBC 有四种驱动类型,分别是: JDBC-ODBC 桥(JDBC-ODBC bridge driver plus ODBC driver) 本地 API 驱动(Native-API partly ...

  3. JDBC驱动自身问题引发的FullGC

    公众号HelloJava刊出一篇<MySQL Statement cancellation timer 故障排查分享>,作者的某服务的线上机器报 502(502是 nginx 做后端健康检 ...

  4. Java JDBC 驱动 MySQL

    MySQL: 1>下载地址:http://www.mysql.com/products/connector/ 2> //jdbc:[数据库类型]://[ip地址]:[端口号]/[数据库名] ...

  5. JDBC驱动程序类型

    JDBC驱动程序是什么? JDBC驱动程序在JDBC API中实现定义的接口,用于与数据库服务器进行交互. 例如,使用JDBC驱动程序,可以通过发送SQL或数据库命令,然后使用Java接收结果来打开数 ...

  6. Atitit.自定义jdbc驱动  支持jsql

    Atitit.自定义jdbc驱动  支持jsql 1. 为什么需要自定义驱动1 1.1. 透明分库分表1 1.2. 自定义数据库的接口.比如大数据文档文件类型的数据库,数据存储引擎2 2. 整个文章分 ...

  7. [Java] Oracle的JDBC驱动的版本说明

    classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 作者:赵磊 博客:http://elf8848.iteye.com 来源:http:/ ...

  8. IDEA用Maven连接MySQL的jdbc驱动,并操作数据库

    1.在IDEA里创建Maven项目 1.1.点击Create New Project   1.2.选择Maven,JDK这里用的是1.8,点击Next  1.3.填入“组织名”.“项目名”,版本是默认 ...

  9. IDEA导入MySQL的jdbc驱动,并操作数据库

    将MySQL的jdbc驱动,导入IDEA的方式,虽然也能连接并且操作数据库,但并不推荐这种方式,推荐使用Maven工程的方式:https://www.cnblogs.com/dadian/p/1193 ...

随机推荐

  1. iOS---开发实用传感器

    传感器 1.什么是传感器 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上 2.传感器的作用 用于感应\检测设备周边的信息 不同类型的传感器, 检测的信息也不一样 iPhone中的下面现象都 ...

  2. Matlab中size、numel、length、fix函数的使用

    size():获取矩阵的行数和列数  (1)s=size(A),      当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size ...

  3. android手机web网站拨打电话几种方式

    1. <input name="phone" format="*m" value="13"/> <do type=&quo ...

  4. java中属性命名get字母大小写问题

    java文件 company.java private int sTime; public void setSTime (int sTime) {        this.sTime = sTime; ...

  5. HR教你面试时怎么谈出高工资

    不是任何时候谈钱都会伤感情,比如跟客户谈合同报价,跟房东谈房租,以及面试时和公司HR谈新工作的薪酬待遇. 这事儿一般不需要你先开口.在面试进入尾声的时候,如果HR对你还算满意,通常就会开始问你目前的薪 ...

  6. 【C语言】控制台窗口图形界面编程(四):文本输出

    目录 00. 目录 01. FillConsoleOutputAttribute函数 02. FillConsoleOutputCharacter函数 03. WriteConsoleOutputCh ...

  7. python 3 廖雪峰博客笔记(二) python解释器

    python 解释器用于理解 python代码,存在多种python解释器 CPython 官方版本python解释器,用C语言开发,使用最广泛 IPython 基于CPython,在交互方式上有所增 ...

  8. BZOJ 4823 Luogu P3756 老C的方块 染色+最小割

    题面太长了请各位自行品尝—>老C的方块 分析: 我们要解决掉所有使人弃疗的组合,还要保证花费最小,容易想到最小割(当然你要是想费用流的话,我们就没办法定义流量了) 我们来分析一下那些令人弃疗的组 ...

  9. Centos6 安装nginx

    一.编译安装nginx 1.安装nginx所需要的库pcre,pcre的全称为:perl compatible regular expression即perl正则表达式,是为了使nginx具备URL重 ...

  10. buf.copy()

    buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]]) targetBuffer {Buffer} 需要拷贝的 Buffer ...