代码改变世界

Java Persistence API

2012-11-26 09:24  congdepeng  阅读(224)  评论(0)    收藏  举报
dsfds
 
 
f
dsfd
 
 
dsfd
 
 

一,缘由

1.1 数据库的产生

一开始,就一台计算机,操作系统管理硬盘,你有数据要维护,你就自定义一个文件去存储,数据可以是纯文本,可以是结构化的数据结构。
 
因为纯文本结构简单的局限性,大多数利用程序来维护的数据都是结构化的二进制数据。对数据的维护免不了有如下操作:
  • 新建
  • 查询
  • 删除
  • 修改
由于对数据的维护实在是太平常的一个需求,于是大家期望一个软件可以完成这些重复的操作,让我们可以只关注于数据的新建,查询删除,修改而不关注如何去做的细节。
 
于是,一个叫数据库的软件产生了。你自己写一个软件,去读写,查询,删除,修改一个你指定的文件的内容,如果你对外提供一个操作接口,那么本质上你也可以自称你做了一个数据库软件。
 
因为写一个所谓的数据库是如此的简单,于是迫切的需要统一各个数据库的操作接口。又因为大多数的数据库都是结构化的,因此最终发明了SQL(Structured Query Language),即结构化查询语句。
 
如果你写的那个小软件也实现了SQL的接口,那么你就可以发行你的beta版数据库了。
 
 
1.2 ODBC, JDBC
 
英语是一种语言,会说英语的人可以称为English Speaker。
SQL也是一种语言,会处理SQL的软件可以称为数据库系统。
 
现在你想要和一个English Speaker交流,那么他在哪里?他忙不忙?他如何听见你说的话?是面对面交流还是通过电话或者视频?
哪怕交流的内容一致,但是交流的形式是多种多样的。
 
同理,你想要和一个别人开发的支持SQL的数据库通信,那么这个数据库IP是多少?是否可以建立连接?是在局域网还是互联网?
 
我们只想关心数据的读写,查询,删除,修改等,并不想关心通信的细节,于是微软发布了ODBC(Open Database Connectivity,开放数据库互连)来提供一种标准的API方法来访问数据库系统。这些API利用SQL来完成大部分任务。
 
ODBC的本质其实是一组接口,各个数据库厂商都需要为自己的数据库实现ODBC接口,从而应用程序可以使用ODBC以一种一致的方法来访问各种不同的数据库。
 
一切看起来都还不错,你在你的电脑上安装一个数据库,然后写程序利用数据库的ODBC驱动去和数据库交互。
 
随着网络的普及,Client/Server结构越来越多普遍,现在数据库都会安装在独立的一台数据库服务器上,供网络上的其他客户端调用,那么每多一个客户端,你都需要在客户端配置数据库厂商提供的数据库驱动,这非常的不方便。
 
随着网络的进一步普及,Browser/Server结构称为主流,Java语言越来越流行,Java开发者迫切的需要一个纯Java接口的数据库访问接口,因此JDBC(Java Database Connectivity,Java数据库互连)应运而生。
 
JDBC驱动共分4种类型:
 

类型1: JDBC-ODBC桥

这种类型的驱动把所有JDBC的调用传递给ODBC。
优点:只要有对应的ODBC驱动即可访问。
缺点:
  1. 效率低
  2. 需要客户端预装ODBC驱动

类型2:本地API驱动

这种类型的驱动通过客户端Java代码来加载数据库厂商提供的本地代码库(大多为c/c++库)来访问数据库。
  • 优点:速度比类型1快
  • 缺点:需要客户端预装对应的数据库厂商代码库
 

类型3:网络协议驱动

这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,这个中间件程序将请求转化为具体的API调用。
优点:不需要在客户端加载数据库厂商提供的代码库,单个驱动程序可以对多个数据库进行访问,可扩展性好。
缺点:
  1. 在中间件层仍然需要最最终数据源进行配置
  2. 由于多出一个中间件层,速度仍然会打折扣

类型4:本地协议驱动

这种类型的驱动使用套接字(Socket)直接在客户端和数据库通信。
 
优点:访问速度最快,最纯粹的Java实现。
缺点:
  1. 因为大多数流行的数据库都是不开源的,因此只有数据库厂商自己才能提供这样的JDBC驱动实现
  2. 需要针对不同的数据库使用不同的驱动程序(但是幸好JDBC API是一致的)