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驱动即可访问。
缺点:
- 效率低
- 需要客户端预装ODBC驱动
类型2:本地API驱动
这种类型的驱动通过客户端Java代码来加载数据库厂商提供的本地代码库(大多为c/c++库)来访问数据库。
- 优点:速度比类型1快
- 缺点:需要客户端预装对应的数据库厂商代码库
类型3:网络协议驱动
这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序使用套接字(Socket)来调用服务器上的中间件程序,这个中间件程序将请求转化为具体的API调用。
优点:不需要在客户端加载数据库厂商提供的代码库,单个驱动程序可以对多个数据库进行访问,可扩展性好。
缺点:
- 在中间件层仍然需要最最终数据源进行配置
- 由于多出一个中间件层,速度仍然会打折扣
类型4:本地协议驱动
这种类型的驱动使用套接字(Socket)直接在客户端和数据库通信。
优点:访问速度最快,最纯粹的Java实现。
缺点:
- 因为大多数流行的数据库都是不开源的,因此只有数据库厂商自己才能提供这样的JDBC驱动实现
- 需要针对不同的数据库使用不同的驱动程序(但是幸好JDBC API是一致的)
浙公网安备 33010602011771号