相信做过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. 编译器出现conflicting types for 某某的错误原因总结

    直译就是xxxx 发生了一种冲突!比如今天发现的这个错误,实属低级! 本次错误的原因是:函数没有先声明,便写在了主函数后面!应该是先声明,后定义,如果只有定义,则定义必须写在主函数上方.通过查资料,有 ...

  2. 记录一则ORACLE MOVE操作后重建索引过程被强制中断导致的ORA-8104案例

    环境:SunOS + Oracle 11.2.0.3   对部分表进行Move操作之后,未重建对应的索引,会导致ORA-1502 索引不可用. 此时需要用下面的查询拼接出重建不可用索引的sql语句: ...

  3. 1Z0-053 争议题目解析700

    1Z0-053 争议题目解析700 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 700.Which two statements are true about a duplica ...

  4. 【JUC】JDK1.8源码分析之ReentrantLock(三)

    一.前言 在分析了AbstractQueuedSynchronier源码后,接着分析ReentrantLock源码,其实在AbstractQueuedSynchronizer的分析中,已经提到过Ree ...

  5. 3.羽翼sqlmap学习笔记之Cookie注入

    Cookie注入: 1.假设这个网址"http://www.xxx.org/Show.asp?id=9"存在注入点.2.sqlmap命令提示符下输入下列内容进行跑表. sqlmap ...

  6. js正则表达式语法

    1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...

  7. 引用Microsoft.Office.Interop.Excel出现的问题

    引用Microsoft.Office.Interop.Excel出现的问题   转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背 ...

  8. jquery点击隐藏和显示

    <script type="text/javascript"> $("#close").click(function(){ $("#cen ...

  9. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  10. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...