数据库连接方式各式各样,如何取舍,如何区分? 让人很是迷惑,只有理解各种方式异同后,方能做出正确选择。
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目前成为标准的类库还只有一小部分。
欢迎批评指正!
忍者职业