博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
比较ole db/odbc/ado/ado.net/jdbc
阅读量:5440 次
发布时间:2019-06-15

本文共 1813 字,大约阅读时间需要 6 分钟。

数据库连接方式各式各样,如何取舍,如何区分? 让人很是迷惑,只有理解各种方式异同后,方能做出正确选择。

1. 如何理解?

    最早:数据库编程都是直接操作数据库厂商提供的API,每个数据库厂商的提供的数据库操作的API都不相同,如调用函数,操作语句等等。因此每个应用程序都只能对应一个数据库。如果想换数据库,需要重写一遍数据库操作代码,这样的代价是非常大的。

  后来:微软开发的ODBC结束了直接调用数据库API进行数据库操作的方式.ODBC将所有数据库特定的,底层的操作细节(CLI)封装在驱动(drive)中,并提供一套标准的函数调用。使用时,ODBC会动态地加载数据库的CLI,将函数调用转换成各个数据库的CLI调用。这样应用程序与数据库API本身就隔绝开了,如下图所示。这样访问所有的关系型数据库都可以使用一套标准的ODBC API即可。ODBC成为最早的通用数据库访问技术。

    

  再后来:随着面向对象的技术的发展,微软又推出了OLE DB。 在OLE DB中,将不会有drive的概念,取而代之的是提供者(provider),每个数据库厂商都需要对象的OLE DB provider。需要注意的是,provider实现了基于COM的接口,这些接口封装了访问数据库的操作细节(CLI)。那么应用程序使用这些通用的接口来进行数据库的访问,而不用考虑数据库的细节。所以,可以理解OLE DB是规定了数据使用者和提供者之间达成了一种协议。请参考下图。    

前面所述的是提供了provider的数据库。为了兼容一些没有提供provider的数据库,OLEDB也可以基于ODBC,即provider是基于ODBC实现的。这种实现会经过两层,效率会比较低。由于目前大多数数据库都提供了provider,所以这种方式比较少见。 可以看到,OLE DB与ODBC类似,但是原理上是不相同的。还有一点就是,ODBC只支持关系型数据库,而OLE DB除了关系型数据库外,还支持Excel等。

  再再后来,微软为了简化OLE DB接口,推出了ADO来封装OLE DB的接口,实现与数据库的通信,使得用户更易于调用数据库相关操作。随着.NET推出,微软进一步进行升级ADO为ADO.NET。 

     

JDBC跟上面几种数据库连接技术不太相同,它是面向JAVA的,是种用于执行SQL语句的Java API。下面会详细阐述JDBC与其他几种技术的异同。

2. odbc vs jdbc

   1/ ODBC 是采用C语言开发的,而JDBC是由JAVA语言开发的,那么在易用性上,JDBC将更加简单。ODBC API比较繁琐,而且不易使用。

   2/ ODBC在使用时,需要进行一定的配置才能使用,如windows上在控制面板中配置ODBC数据源等,而JDBC不需要,只需在编码时,指定相关的配置即可。

   3/ JDBC提供了一种JDBC-ODBC桥接的驱动程序,用于移植ODBC程序到JDBC上,这种方式效率会受影响,一般建议直接用JDBC重写数据库操作。

3. ado.net vs jdbc(请参考http://www.cnblogs.com/jobs/archive/2004/07/28/27870.aspx)

   从选择的角度上来看,这两种数据库操作方式比较其实是.NET平台和JAVA平台的比较,依赖与应用程序本身采用哪种平台。如果是JAVA应用,则首选JDBC,如果是.NET应用程序,首选ADO.NET。从应用的角度上来看,两者也有一些差别:

   1/ ADO .NET最大的优点是对断开连接访问数据库方式的强有力支持。相比起来,JDBC也引入类似的功能,RowSet,但是比起ADO .NET来,还是不够/

   2/ ADO .NET功能不完整。MS对这一点也是承认的,承认ADO .NET不能替代ADO。其中一个很重要的功能是分页访问数据的支持。以前在开发ADO .NET程序时,还专门编写一个程序,调用ADO,分页获取数据。

   3/ 跨平台性上,JDBC更好。因为JDBC是一个规范,是一个标准,而ADO .NET只是微软的私家类库。.NET Framework目前成为标准的类库还只有一小部分。

 

欢迎批评指正!

忍者职业

 

转载于:https://www.cnblogs.com/renzhezhiye/archive/2013/02/19/2917217.html

你可能感兴趣的文章
java中使用队列:java.util.Queue
查看>>
随笔记录(2019.7.16)
查看>>
clang代替gcc
查看>>
【Shell】基础正则表示法及grep用法
查看>>
Demo整合
查看>>
Android基础——JSON数据的全方位解析
查看>>
Derek解读Bytom源码-持久化存储LevelDB
查看>>
规范化-数据库设计原则
查看>>
BASIC-24_蓝桥杯_龟兔赛跑预测
查看>>
C# 中使用Linq和Lambda表达式对List<T>进行排序
查看>>
offsetHeight, clientHeight与scrollHeight的区别
查看>>
002-python基础-hello-world
查看>>
WPF复杂形状按钮
查看>>
谈一谈循环的性能提升
查看>>
为vsftpd 本地用户指定目录
查看>>
codevs1222 信与信封的问题
查看>>
登录界面 动画背景效果
查看>>
B.xml
查看>>
支付宝(Alipay)支付,超详细使用教程讲解!
查看>>
《余额宝技术架构及演进》读后感
查看>>