数据库访问杂谈

    一直想写一篇数据库访问的博客,之前很忙,一直没有时间。想写的数据库访问的这个博客不涉及到具体的数据库操作,比如增删改查或者一些ORM框架的使用,比如mybaitis、Hibernate,也不涉及到高阶的事务处理。就是想概况的写一下。

    那什么是数据库访问呢,很简单——访问数据库呗。对,就是这么简单,咱们用图来说话,如下图所示:


      
客户端程序,比如Java程序(因为本人是干Java的,就以java举例),发送消息给关系型数据库,关系数据库返回查询结果给客户端程序。这两者到底是怎么通信的呢,有的人可能会说用JDBC API,这样说也对,但是还是没有涉及到根本。这两者是通过socket通信的。首先客户端程序是属于应用层的,关系型数据库也是属于应用层的,而且关系型数据库一般都有固定的端口,比如mysql3306.同样客户端程序也有端口(唯一标识一个应用程序:主机IP地址+端口号)。涉及到应用层的2个进程通信,并且还是用的端口,那么就是socket通信,并且这两者之间的这种通信还要求是稳定的,可靠的,那么就要求传输层采用的协议应该是TCP的协议。在这里咱们再来回顾一下TCP/IP模型的四层结构



      
应用层与应用层的之间的通信。还是以数据库访问为例。客户端程序—>传输层—>网络互联层—>主机到网络层—>主机到网络层—>网络互联层传输层—>数据库。而socket就介于应用层和传输层之间(传输层有我们很熟悉的两大协议TCPUDP)。到这里了,有人可能要问了那JDBC API是什么,其实这就跟JDBC APIORM框架的关系差不多,如果我现在让你不用ORM框架了,让你用原生的JDBC去写数据库访问层,你说你痛苦吗。同样的,如果我们用原生的socket通信来做数据库访问也是很复杂的,原因就是各个数据库的采用的应用层协议都不一样,如果采用socket通信的方式访问数据库,那么从oracle切换到mysql访问就要颇费一番周章了,所以SUN公司就提供了一个JDBC API,那么JDBC API是什么——JDBC APISUN公司定义的java database connectivity,是SUN定义的Java数据库访问规范,说白了,就是接口,由各大数据库厂商去实现,各大厂商去实现与自己的数据库通信的细节。这里就涉及到面向接口编程,面向接口编程能让我们轻松的实现从访问oracle切换到访问mysql

采用这样的方式也就是JDBC API的方式访问数据库有一下2点好处

第一:简化数据库访问代码,无需涉及到与数据库服务器通信的细节。

第二:不依赖具体的数据库平台,只要数据库提供商实现了JDBC API就可以,这样同一个Java程序就可以访问多个不同类型的数据库。

      java程序通过JDBC API访问数据库如图所示:



数据库访问整体上来说就是这样,具体的如何用jdbc访问数据库就不说了。很多资料都有介绍

猜你喜欢

转载自ddlgyq.iteye.com/blog/1987907