JDBC Driver Types
相信做过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的更多相关文章
- ORACLE11g JDBC Driver
http://blog.163.com/z_rx/blog/static/276363762011312947507/ ORACLE服务器端安装程序找到相应目录"x$\app\Adminis ...
- Using the JDBC Driver
Download JDBC Driver This section provides quick start instructions for making a simple connection t ...
- Class.forName("com.mysql.jdbc.Driver") ;
try { Class.forName("com.mysql.jdbc.Driver") ; } catch(ClassNotFoundException e) { System. ...
- [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 ...
- java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver)
java中myeclipse连接mysql问题(java.lang.ClassNotFoundException: com.mysql.jdbc.Driver) 1.往项目中添加mysql-conne ...
- JDBC driver connection string大全
Database / data source URL format / driver name Value Default port MySQL URL format: jdbc:mysql: ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...
- unkow jdbc driver : http://maven.apache.org
报了这么一个错,找了很久才找到问题出在哪里,具体为什么会什么出现现在还不怎么懂,只是现在能让它继续跑起来 这个错是因为我的spring-mybatis.xml文件读取不了jdbc.properties ...
- 【转】关于Class.forName(“com.mysql.jdbc.Driver”)
原文:http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html 传统的使用jdbc来访问数据库的流程为: Class.forName ...
随机推荐
- Cesium原理篇:1最长的一帧之渲染调度
原计划开始着手地形系列,但发现如果想要从逻辑上彻底了解地形相关的细节,那还是需要了解Cesium的数据调度过程,这样才能更好的理解,因此,打算先整体介绍一下Cesium的渲染过程,然后在过渡到其中的两 ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- 在新浪云SAE中使用smarty引擎模版
在新浪云上使用smarty时会发现又这样的错误信息: “SAE_Fatal_error: Uncaught exception 'SmartyException' with message 'unab ...
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
先来看一看jQuery的ajax核心处理流程($.ajax) a. ajax( [url,] options )执行流程 第一步,为传递的参数做适配.url可以包含在options中 //传递的参数只 ...
- jquery easyui使用(一)······可折叠面板的布局,手风琴
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- Asp.net 面向接口可扩展框架之类型转化基础服务
新框架正在逐步完善,可喜可贺的是基础服务部分初具模样了,给大家分享一下 由于基础服务涉及面太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 ...
- javascript严格模式
设立"严格模式"的目的,主要有以下几个: 1. 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; 2. 消除代码运行的一些不安全之处,保证代码运行的安全: ...
- form表单提交和阻止
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- uct框架数据库sql文件导入错误之 sql_mode
uct框架在导入sql文件时可能会出现一种错误 ERROR 1101 (42000): BLOB/TEXT column 'brief' can't have a default value 这是由于 ...
- PHP 字符串左边补0,字符串右边补0
概述:项目中经常会使用到在一串编码左边.右边甚至中间自动填充制定字符如"0" 并且制定填充后的字符串长度. 函数str_pad:该函数返回 input 被从左端.右端或者同时两端被 ...