《JDBC连接技术》"江南月"(一)JDBC的简介

在数据库开发领域,我们还要关心这样的一个需求:应用程序是要与数据库进行连接的,要进行对数据的"存取"业务。

早期的数据库开发领域是没有通用的应用程序编程接口的。开发人员在使用不同数据库产品时,必须学习和使用厂商专用API,例如Oracle Call Interface、Microsoft Database Library等,增加了开发的成本,和开发周期。

一、ODBC

针对业界对通用编程接口的需求,微软推出了ODBC(Open Database Connectivity)方案,并获得厂商和开发人员的认可。ODBC建立了一组规范,并提供了对数据库访问的标准API,这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。后来被X/OPEN和ISO/IEC采纳,作为SQL标准的一部分。

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

一个完整的ODBC由下列几个部件组成:

 

1.应用程序(Application)。

应用程序负责处理和调用ODBC函数(也就是程序开发人员所需要做的事情了,大大简化了开发难度),步骤如下:

  • 连接数据库
  • 提交SQL给数据库
  • 检索结果并处理错误
  • 提交或者回滚SQL语句的错误
  • 与数据库断开连接

2.驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是注册并管理ODBC驱动程序,是ODBC中最重要的部件。

ODBC驱动程序管理器能将与ODBC兼容的SQL请求从应用程序传给驱动程序,随后由驱动程序把对数据库的操作翻译成相应数据库引擎所提供的固有调用,对数据库实现访问操作。

3.ODBC驱动程序。它是一些DLL,提供了ODBC和数据库之间的接口。

驱动程序是由数据库厂商自己开发的程序。ODBC通过驱动程序完成了数据库的独立性。驱动程序是一个用于支持ODBC函数调用的模块,应用程序调用驱动程序所支持的函数来操纵数据库。若想使应用程序操作不同类型的数据库,就要动态连接到不同的驱动程序上。

4.数据源。数据源包含了数据库位置(连接地址,登陆名,密码)和数据库类型等信息,实际上是一种数据连接的抽象。

二、JDBC

1.简介

Sun公司参考了ODBC,为Java设计了一套数据库连接规范JDBC(JAVA Database Connectivity)。目标是让Java开发人员在编写数据库应用程序时,可以有统一的接口,无须依赖特定数据库API,达到“一次开发,适用所有数据库”。虽然实际开发中,经常会因为使用了数据库特定的语法、数据类型或函数等而无法达到目标,但JDBC的标准还是大大简化了开发工作。

JDBC,提供了一套标准接口,即访问数据库的通用API,用于执行SQL语句。它由一组用于java语言编写的类和接口组成。不同的数据库厂商根据各自数据库的特点去实现这些接口。

JDBC 是个"低级"接口,它可直接调用 SQL 命令。在这方面它的功能极佳,并比其它的数据库连接 API 易于使用。但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具,高级接口是"对用户友好的"接口,使用的是一种更易理解和更为方便的 API,这种API在幕后被转换为诸如 JDBC 这样的低级接口。

 

                                   

JDBC标准主要分为两部分:

  • 面向应用开发人员的应用程序开发接口
  • 面向数据库驱动程序的开发者接口(数据库厂商开发)。

而JDBC标准中,按操作方式的不同把驱动程序分为以下四种类型:

  • JDBC-ODBC Bridge Driver
  • Native API Driver
  • JDBC-Net Driver
  • Native Protocol Driver

注意:而我们常用的是第四种驱动程序。我们开发中使用的驱动jar包基本都属于此类,通常由数据库厂商直接提供,例如mysql-connector-java,驱动程序把JDBC调用转换为数据库特定的网络通信协议。因为使用网络通信,驱动程序可以纯Java实现,支持跨平台部署,性能也较好。

2、JDBC常用API介绍

(1)驱动管理类型:DriverManager 

用于管理各种不同的JDBC驱动,如

static  getConnection(String url,String user,String password),提供了静态方法,用于获取连接对象。

url:连接数据库的路径

user:数据库的用户名

password:数据库用户的密码

(2)连接接口:Connection

Statement  createStatement():用于获取SQL语句编译对象

PreparedStatement   prepareStatement( String  sql): 用于获取SQL语句预编译对象。

(3)语句对象接口

Statement

boolean execute(String sql):用于执行DDL语言

int executeUpdate(String sql):用于执行DML语言

ResultSet executeQuery(String sql):用于执行DQL语言

void  addBatch(String sql):添加批处理

int[]  executeBatch();执行批处理

PreparedStatement

提供了一些java数据类型转数据库数据类型的方法,如:void  setString(int parameterIndex,String x)等。

boolean execute():用于执行DDL操作

int executeUpdate():用于执行DML操作

ResultSet  executeQuery():执行DQL操作

void  addBatch():添加批处理

int[]  executeBatch();执行批处理

(4)结果集接口:ResultSet

执行DQL语言操作时,将查询的记录信息封装到结果集对象里.

boolean next():用于询问结果集有没有下一条记录。返回true,会移动到下一条之上。

同时提供了相应数据库字段类型转成java数据类型的get方法

如:

int getInt(int columnIndex)/getInt(String columnName)

double getDouble(int columnIndex)/getDouble(String columnName)等

3、JDBC原理

                                                       

JDBC提供接口

数据库厂商实现接口

程序员调用接口,实际上调用的是数据库厂商实现的部分

实际工作过程如下:

  • (1)、加载驱动、建立连接
  • (2)、创建SQL语句对象
  • (3)、执行sql语句
  • (4)、处理结果集
  • (5)、关闭连接

4、不足

尽管JDBCJAVA语言层面实现了统一,但不同数据库仍旧有许多差异。为了更好地实现跨数据库操作,于是诞生了Hibernate项目,Hibernate是对JDBC的再封装,实现了对数据库操作更宽泛的统一和更好的可移植性。

---------------------------------------------------------------------------如有疑问,敬请留言-----------------------------------------------------------------------------

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值