JDBC和JDBC驱动
首先要搞清楚的是,JDBC和JDBC驱动。JDBC指的是一组API,用于加载相应的驱动程序,说白了,在Java中,就是指的java.sql(Core API)和javax.sql(Extension 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 driver,Bridge驱动将所有JDBC请求翻译成ODBC请求,并转发给ODBC驱动。只建议在实验中使用,或没有其它选择时使用。
Type 2 driver,Native驱动,它将JDBC请求翻译为“特定的数据库请求”,
Type 3 driver,Middleware驱动将JDBC请求,通过网络,转发给中间层服务器。中间层再将其翻译为具体的数据库请求,中间层可以依次使用Type 1、2和4型驱动。
Type 4 driver,Pure驱动,使用java的network相关的库,直接与数据库服务器通信。
四种驱动的结构如下图:
四种驱动优缺点比较
四种JDBC驱动的优缺点比较如下:
JDBC驱动Type
|
优点
|
缺点
|
Bridge
|
1.只要DB的ODBC可用,这种方式可用于几乎所有数据库
|
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. 提供了如缓存、负载均衡等高级特性,及logging和auditing
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/XML与XML
虽然在JDK6中已经支持了JDBC 4.0,但是各数据库产品相应的JDBC驱动却未必有。当然,JDBC4.0是后向兼容的,借助JDK6使用JDBC3.0的功能是完全没有问题的。
提一下JDBC中的ResultSet和Cursor
一次查询的结果集就是ResultSet,包含0到多个Row。而Cursor游标被看作是指向一行记录的一个指针。JDBC API支持游标的forward、backward、移到特定行、移动到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(".....");
参数a和b分别为Type和Concurrency,若此处不指定参数,它们的默认值为TYPE_FORWARD_ONLY 和CONCUR_READ_ONLY。
另外,ResultSet接口提供了一系列方法以移动游标,如:next(),
previous(), first(), last(), beforeFirst(), afterLast(), relative(int),
absolute(int)等等。
- 大小: 4.4 KB
- 大小: 24.1 KB
分享到:
相关推荐
mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...
mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及...
JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包JDBC驱动包
Oracle12C 12.2.0.1 JDBC 驱动 Oracle Database 12c Release 2 (12.2.0.1) drivers
达梦数据库JDBC驱动包,在mysql数据库导入达梦的的时候导入工具需要用到
mariadb-java-client-1.1.1 jdbc驱动
TDengine jdbc驱动包
GBase 是南大通用数据技术有限公司推出的自主品牌的数据库产品,目前在国内数据库市场具有较高的品牌知名度。GBase系列产品包括:新型分析型数据库...目前这工驱动是GBASE8A的jdbc驱动,找了好久才找到的,亲测可用。
sql server jdbc 驱动包
Oracle JDBC驱动包
因为Oracle的JDBC驱动 ojdbc12,ojdbc14 很古老了,是针对JDK1.2以及JDK1.4平台的。很多时候会有各种问题,所以从官网下载了最新的驱动,包括支持JDK1.5的ojdbc5.jar, 以及 支持JDK1.6的ojdbc6.jar驱动包,以及官方demo...
oracle12 jdbc驱动包
SQLServer2008 JDBC驱动包,可以用于解决Java连接SQLServer2008事物问题
TDengine的JDBC驱动包编译包,根据TDengine-ver-2.6.0.12版本进行编译,包含所有相关依赖,方便直接当客户端驱动使用,节约编译时间,可以直接用。
Oracle连接数据库JDBC驱动包,对于老版本的oracle,连接驱动比较难找比较难找,甲骨文官网下载难以查找旧版JDBC驱动。 压缩包搜集了几个版本的JDBC驱动,适用于Oracle9i 10,11等。
kingbaseV8 jdbc 驱动
sqlserver2005-jdbc驱动、sqlserver2008-jdbc驱动、mysql-jdbc驱动、oracle驱动- 各种jdbc驱动打包集合,适配各种数据库!
sybase 数据库 jdbc 驱动下载 版本:jconn4-7.5.jar
这是一个JAVA的jdbc驱动包,可以帮助你想操作数据库一样快速操作excel 示例代码: public static void main(String[] vars){ String driver = "com.hxtt.sql.excel.ExcelDriver"; String url = "jdbc:excel:///C:\...