相信做过Java开发的人都对JDBC驱动有所了解:它是Java程序访问数据库的中间件。JDBC驱动可以使Java程序打开数据库连接,并发送SQL(DDL,DML)或者数据库命令,执行结果以Java数据类型返回。从实现的角度来讲:它是对Java的JDBC API的实现,由第三方数据库厂商来完成。

JDBC Driver Types

由于操作系统、硬件平台的多样性, Sun公司将JDBC实现分为4种类型(Type1 ,2,3,4)。下面就对这四种类型分别进行说明。

Type 1:JDBC-ODBC Bridge Driver

对于type1 类型的驱动,通信模型是这样的:

1)  一台服务器上安装有Database Server

2)  本机(运行java程序的机器)上安装数据库的客户机

  • ·这个客户机程序用于和远程Database Server 通信
  • ·这个客户机程序上有ODBC驱动。

3)  Java程序与客户机上的ODBC驱动通信,会使用到一个JDBC  ODBC桥(type 1)

也就是说,Java程序通过JDBC ODBC桥与客户机上的ODBC驱动通信,ODBC与远程数据库通信,以此来完成Java与数据库的通信。

在Java刚诞生的那个年代,这种方式是很有用的,因为当时的数据库都是只支持ODBC访问。但现在呢,这种访问方式已经很少看到了。如果你想要练习这种方式的话,还是可以的。

譬如说SQLServer、Access、DB2 ,肯定还是支持这种方式的。

Type 2:JDBC-Native API

这种方式下,JDBC API 使用了JNI方式,也就是Java调用转为C/C++调用,以此来访问数据库。也就是说整个通信过程是这样的:

·Java代码调用JDBC API

·JDBC API转为JNI调用,即Type2 类型的驱动调用。

·Type2类型的驱动访问数据库。

这种方式,也是需要安装客户机的,因为这个驱动(Type2-Native API 实现)是在客户机里才有的。

Type2相比与Type1,少了ODBC,所以这种方式的开销会更少一些。

例如,在使用PLSQL Developer时,会使用到OCI(Oracle Call Interface)。

Type 3:JDBC-Net pure Java

Type1, 2, 4都是一种两层的通信模式:本机程序(包括Java程序、驱动、客户机)->数据库服务器。然而Type 3则是一种三层的通信模式:

中间服务器上安装了JDBC Type1,2,4类型的驱动与远程数据库直接交互,java程序使用Type3驱动基于网络来调用JDBC Type1,2,4,以此来完成Java程序与数据库的通信。

Type 4:100% Pure Java

这种方式,应该是目前最为常用的了。直接通过JDBC驱动与数据库进行交互。还需要安装客户机什么的。

官方文档中的通信模型图

如何选择JDBC驱动呢?

如果你访问一类数据库,例如Oracle, Sybase, IBM,最好是选用type 4.

如果你的Java程序会同时访问多种数据库,Type 3 是不错的选择。

如果Type3,4都不可用的情况下,Type2 是一种不错的选择。

Type 1 现在已很少用的到了。

JDBC Driver Types的更多相关文章

  1. ORACLE11g JDBC Driver

    http://blog.163.com/z_rx/blog/static/276363762011312947507/ ORACLE服务器端安装程序找到相应目录"x$\app\Adminis ...

  2. Using the JDBC Driver

    Download JDBC Driver This section provides quick start instructions for making a simple connection t ...

  3. Class.forName("com.mysql.jdbc.Driver") ;

    try { Class.forName("com.mysql.jdbc.Driver") ; } catch(ClassNotFoundException e) { System. ...

  4. [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法

    问题:“JDBC Driver class not found: com.mysql.jdbc.Driver”  通过以下命令启动cm [root@hadoop1 ~]# /etc/init.d/cl ...

  5. java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver)

    java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver) 1.往项目中添加mysql-conne ...

  6. JDBC driver connection string大全

    Database   / data source URL format /   driver name Value Default port MySQL URL format: jdbc:mysql: ...

  7. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...

  8. unkow jdbc driver : http://maven.apache.org

    报了这么一个错,找了很久才找到问题出在哪里,具体为什么会什么出现现在还不怎么懂,只是现在能让它继续跑起来 这个错是因为我的spring-mybatis.xml文件读取不了jdbc.properties ...

  9. 【转】关于Class.forName(“com.mysql.jdbc.Driver”)

    原文:http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forName ...

随机推荐

  1. JavaScrict中的断言调试

    今天在看忍者秘籍的时候,看到一个断言方法.查阅了一下资料,原来javascript中的console也包含这个方法.具体用法如下: <script type="text/javascr ...

  2. Linux中mongodb安装和导出为json

    采用官方工具导出mongo数据为json格式 文档:https://docs.mongodb.com/manual/reference/program/mongoexport/ 可以远程导出,只要有h ...

  3. phpcurl 请求Chunked-Encoded data 遇到的一个问题

    最早出现的问题情况是提供es的部门在es的外部封装了一个gateway做请求中转. 当我们转换到gateway上之后,发现了问题: 有的请求可以获取到数据,有的请求获取不到数据. 仔细分析了业务代码, ...

  4. jQuery 判断是否包含某个属性

    1.Get the attribute, check the value var attr = $(this).attr('name'); // For some browsers, `attr` i ...

  5. Autofac - 事件

    Autofac在提供之前那些方法的时候, 同时提供了五个事件, 这一篇就看一下这几个事件. 一.五大事件 builder.RegisterType<Person>().As<IPer ...

  6. Verilog HDL模型的不同抽象级别

    所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...

  7. 【JAVA并发编程实战】7、日志服务

    这里是一个应用项目使用生产消费模型的日志类 package cn.study.concurrency; import java.util.concurrent.BlockingQueue; impor ...

  8. 计蒜客_计数和数数(C语言实现)

    “伯爵说”序列如下:1, 11, 21, 1211, 111221, ...1 读作 "one 1" 或者 11.11 读作 "two 1s" 或者21.21 ...

  9. 【工匠大道】一些Vim(Linux)不常见但很逼格的命令(不断更新中)

    本文地址 分享提纲: 1. :Tlist 2. :colorscheme 3. :set cursorline 4. ma 5. vim -x 6. CTRL-] 7. 折叠 8. 向别的用户终端写信 ...

  10. javascript组合继承

    javascript继承有几种继承方式,现在来说说其中的组合继承. 组合继承是结合了原型链和借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处.那就先说说这两种技术吧. 原型链  原型链 ...