JDBC驱动程序与网桥

时间:2011-11-11 18:44:03

标签: java jdbc odbc

我现在在几个应用程序中使用JDBC来查询Derby,PostgreSQL和现在的MySQL数据库。我想我正在扼杀一些基本的术语,试图了解底层实际发生的事情。我见过几个术语:

  • ODBC
  • JDBC驱动程序
  • JDBC-ODBC Bridge

对于每一个人,我都尽力做一些挖掘,并了解它们是什么,它们做了什么,以及它们如何相互关联。我相信我大约有70%的路在那里,我似乎无法找到任何东西(articesl,博客,文档等)将所有内容完美地结合在一起并确认我的怀疑。

ODBC似乎是一个C库(也许是一个DLL?)程序可以用来与RDBM系统(如PostgreSQL和MySQL)进行通信。对这些系统的所有查询都在给定系统上流入和流出此库。

JDBC-ODBC桥是一个Java组件,它包含允许JDBC与给定系统上的ODBC库通信的本机代码。

JDBC是一个用于查询RDBM系统的纯Java API。

JDBC驱动程序(例如PostgreSQL-JDBC驱动程序)是我遇到麻烦的地方。如果所有RDBM系统都遵循RDBMS标准,并且可以与ODBC库通信,那么为什么呢? JDBC需要为每个驱动程序提供不同的“驱动程序”吗?

这些驱动程序是什么?他们在做什么?为什么他们有必要?关于我在这里做出的任何其他断言的澄清也将受到极大的赞赏。提前谢谢!

5 个答案:

答案 0 :(得分:7)

你快到了。好问题。

这些驱动程序是什么:纯JDBC驱动程序是用Java编写的驱动程序,不需要ODBC驱动程序即可运行。当您没有数据库的直接JDBC驱动程序时,您应该只使用ODBC驱动程序(通过JDBC-ODBC桥)(这是非常罕见的,因为现在大多数{如果不是全部}数据库都支持JDBC)。

纯JDBC具有不需要ODBC的优点。 ODBC通常很难配置,并且需要在系统上安装数据库本机客户端库(例如Oracle OCI或Sybase CT Library)。

过去出于性能原因选择了ODBC或本机驱动程序,但我认为现在纯Java / JDBC的性能几乎与其本机/ ODBC对应程序一样好。

他们做了什么:与ODBC相同。用于访问关系数据库的标准化Java API。

为什么它们是必要的:它们是必要的,因为它们更容易使用它们,您只需要JDBC库JAR和URL连接。反对:本机客户端库+ ODBC驱动程序+ JDBC-ODBC配置。还有一种情况是,每个数据库都有自己的网络协议来对其执行查询,并获得结果。因此,每个数据库供应商需要一个驱动程序。它们中的每一个都实现了连接到其关系数据库管理器所需的特定协议。如果您所处的数据库共享相同的SQL语言和相同的通信协议,那么您只需要一个驱动程序。但这不会很快发生。

答案 1 :(得分:6)

ODBC和JDBC是等效的。它们都使用驱动程序将ODBC(或JDBC)调用转换为本机数据库命令。 ODBC较旧,使用C / C ++编写,而JDBC是用Java编写的。当JDBC出现时,大多数DB都没有JDBC驱动程序,因此他们创建了JDBC-ODBC驱动程序,以允许人们使用已经可用的ODBC驱动程序。现在很少使用,因为几乎每个DB都有一个纯Java JDBC驱动程序

答案 2 :(得分:1)

仅仅因为数据库使用“标准”SQL(并且出于某种原因引用了引号),并不意味着数据库使用相同的低级协议进行通信。 SQL只是一种语法,但不是协议。

Postgres和Oracle的协议完全不同,提供不同的功能,即使它们都使用类似的SQL功能。

SQL本身虽然是标准的,但在实现中有很大的偏差。例如,MySQL因其比其他数据库更少的SQL兼容而臭名昭着。虽然今天使用的SQL很多都可以在数据库中移植,但还有很多不是。

JDBC和ODBC是同类精神。它们提供了一个共享接口,您的应用程序可以使用该接口与RDBS进行通信。他们还为供应商提供了一个通用模型。这些是驱动因素。

供应商实现驱动程序以允许JDBC / ODBC兼容程序与其数据库通信。驱动程序任务是将ODBC / JDBC调用转换为适当的SQL或数据库的其他控制调用。

JDBC / ODBC Bridge是一个与现有ODBC驱动程序对话的JDBC驱动程序。这是令人厌恶的。不要使用它。今天备注的每个数据库都有JDBC驱动程序。如果可能的话,坚持使用“类型4”JDBC驱动程序,因为这些是本机Java而不是使用JNI到二进制文件的“类型2”驱动程序。 Buggy类型4驱动程序提供例外,错误的类型2驱动程序会导致JVM崩溃,这会破坏您的appserver。不,谢谢。

答案 3 :(得分:1)

你是对的;你非常接近完整的图片!

JDBC和ODBC在概念上非常相似。它们都是与数据库交互的框架。 JDBC是特定于Java的,而ODBC是特定于Windows的。也就是说,JDBC和ODBC实际上都是无牙的API。在Java术语中,JDBC实际上是一组未实现的接口。虽然他们指定了行为合同,但他们并不知道如何与任何特定数据库交谈。这就是司机进来的地方。

让我们在这里具体谈谈JDBC。 JDBC驱动程序是JDBC interfaces 的具体实现,实际上知道如何与底层数据库引擎通信。 JDBC保证MySQL JDBC驱动程序中的ResultSet的行为与Postgres JDBC驱动程序中的ResultSet行为相同。

正如其他人所指出的,JDBC / ODBC桥只是为使JDBC编写的代码与ODBC基础结构一起工作的一点点粘合剂。一般来说,只有你确定地知道你是专门为Windows编写Java时才有意义; ODBC是特定于Windows的,但JDBC(理论上)是跨平台的。

答案 4 :(得分:0)

  • Jdbc是使用java编写的dricers连接数据库的java方法(自JDBC4起)。
  • ODBC是MS Windows连接数据库的方式,这些驱动程序通常用C
  • 编写
  • JDBC-ODBC Bridge相当陈旧,早在Java版本中,JDBC版本中并没有所有驱动程序都可用,因此构建JDBC和现有ODBC驱动程序之间的通用桥接。