`
SuseLinux
  • 浏览: 26063 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JDBC驱动

 
阅读更多

 

JDBCJDBC驱动

首先要搞清楚的是,JDBCJDBC驱动。JDBC指的是一组API,用于加载相应的驱动程序,说白了,在Java中,就是指的java.sqlCore API)和javax.sqlExtension API)两个包的内容。而JDBC驱动则是对应各数据库产品的驱动程序。与DB直接通话的,是JDBC驱动。一个常见的JDBC访问结构如下:



 

在应用程序与驱动之间多了一层JDBC,是为了屏蔽异种数据库的差异。

Quote: Java application calls the JDBC library. JDBC loads a driver which talks to the database. We can change database engines without changing database code.

 

四种JDBC驱动

JDBC驱动(不是JDBC)分为4类(Type or Level),分别是:

Type 1 –  JDBC-ODBC桥驱动,也称Bridge

Type 2 –  本地API / 部分JAVA驱动,也称Native

Type 3 –  All Java / Net-Protocol 驱动,也称Middleware

Type 4 –  All Java / Native-Protocal驱动,也称Pure

 

参见:http://www.jdbc-tutorial.com/jdbc-driver-types.htm

 

Type 1 driverBridge驱动将所有JDBC请求翻译成ODBC请求,并转发给ODBC驱动。只建议在实验中使用,或没有其它选择时使用。

Type 2 driverNative驱动,它将JDBC请求翻译为“特定的数据库请求”,

Type 3 driverMiddleware驱动将JDBC请求,通过网络,转发给中间层服务器。中间层再将其翻译为具体的数据库请求,中间层可以依次使用Type 124型驱动。

Type 4 driverPure驱动,使用javanetwork相关的库,直接与数据库服务器通信。

 

 

四种驱动的结构如下图:



 

 

四种驱动优缺点比较

四种JDBC驱动的优缺点比较如下:

JDBC驱动Type

优点

缺点

Bridge

1.只要DBODBC可用,这种方式可用于几乎所有数据库

1. 不是全由Java实现,移植性不好;

2. 所有Type中最慢的;

3. 客户端要先安装ODBC

4. 不适用于WEB应用;

Native

1. 使用Native API,速度比Bridge快;

1. 客户端要先安装Native API,故不适用于WEB系统;

2. 不是由Java实现,移植性不好;

3. 若更换数据库,则需安装相应的本地API

4. 快要淘汰了;

5. 不是线程安全的;

Middleware

1. 基于服务端的,客户端不要安装什么东西;

2. 全由Java实现,易于移植,适于WEB应用;

3. 在可移植、扩展性、性能方面还有很大优化空间;

4. 适当设计网络协议,可使JDBC驱动很小,加载很快;

5. 提供了如缓存、负载均衡等高级特性,及loggingauditing

6. 一个驱动可用于多种数据库;

7. 在所有Type中,效率最高;

1. 它需要额外的一个服务端系统(安装和维护的开销),回传结果集需要更长的时间;

Pure

1. 全由Java实现,平台无关,最适于WEB应用;

2. 架构层次减少,性能很不错;

3. 在客户端服务端都不需要额外安装软件,这些驱动支持动态下载;

1. 每一种数据库都需要一个不同的驱动

 

 

 

 

 

 

JDBC的历史与版本

发布年份

JDBC版本

JSR规范

JDK实现的版本

2006

JDBC 4.0

JSR 221

JDK 6

2001

JDBC 3.0

JSR 54

JDK 1.4

1999

JDBC 2.1

 

JDK 1.2

1997

JDBC 1.2

 

JDK 1.1

 

JDBC 4.0的新增特性:

1)自动载入java.sql.Driver

2)支持ROWID类型

3)支持国家字符集转换

4)支持SQL/XMLXML

虽然在JDK6中已经支持了JDBC 4.0,但是各数据库产品相应的JDBC驱动却未必有。当然,JDBC4.0是后向兼容的,借助JDK6使用JDBC3.0的功能是完全没有问题的。

 

 

提一下JDBC中的ResultSetCursor

一次查询的结果集就是ResultSet,包含0到多个Row。而Cursor游标被看作是指向一行记录的一个指针。JDBC API支持游标的forwardbackward、移到特定行、移动到a row whose position is relative to another row

    ResultSet有三种Types

TYPE_FORWARD_ONLY 不支持Scrollable,游标只能forward

TYPE_SCROLL_INSENSITIVE 支持Scrollable,游标既可forward也可backward,可以移动到某相对位置,也可移动到某绝对位置。对数据的改变不敏感,即当数据库变化时,当前结果集不变。

TYPE_SCROLL_SENSITIVE 支持Scrollable,游标既可forward也可backward,可以移动到某相对位置,也可移动到某绝对位置。对数据的改变敏感,即当数据库变化时,当前结果集也同步改变。

ResultSet有两种Concurrency

CONCUR_READ_ONLY 不能用结果集更新数据库中的表。

CONCUR_UPDATETABLE  能用结果集更新数据库中的表。

如下代码示例:

Statement stmt = con.createStatement(a, b);

ResultSet srs = stmt.executeQuery(".....");

参数ab分别为TypeConcurrency,若此处不指定参数,它们的默认值为TYPE_FORWARD_ONLY CONCUR_READ_ONLY

 

另外,ResultSet接口提供了一系列方法以移动游标,如:next(), previous(), first(), last(), beforeFirst(), afterLast(), relative(int), absolute(int)等等。

  • 大小: 4.4 KB
  • 大小: 24.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics