Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC驱动程序与网桥_Java_Jdbc_Odbc - Fatal编程技术网

Java JDBC驱动程序与网桥

Java JDBC驱动程序与网桥,java,jdbc,odbc,Java,Jdbc,Odbc,我已经在几个应用程序中使用JDBC来查询Derby、PostgreSQL和现在的MySQL数据库。我想我在试图理解引擎盖下到底发生了什么时,被一些基本的术语噎住了。我见过的几个术语: ODBC JDBC驱动程序 桥 JDBC-ODBC桥 对于每一个人,我都尽了最大的努力去挖掘,了解他们是什么,他们做什么,以及他们之间的关系。我相信我已经完成了70%的工作,我只是找不到任何东西(文章、博客、文档等)能很好地将所有事情联系起来,并证实我的怀疑 ODBC似乎是一个C库(可能是DLL?),程序可以使

我已经在几个应用程序中使用JDBC来查询Derby、PostgreSQL和现在的MySQL数据库。我想我在试图理解引擎盖下到底发生了什么时,被一些基本的术语噎住了。我见过的几个术语:

  • ODBC
  • JDBC驱动程序
  • JDBC-ODBC桥
对于每一个人,我都尽了最大的努力去挖掘,了解他们是什么,他们做什么,以及他们之间的关系。我相信我已经完成了70%的工作,我只是找不到任何东西(文章、博客、文档等)能很好地将所有事情联系起来,并证实我的怀疑

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

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

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

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


这些司机是什么?他们是干什么的?为什么它们是必要的?另外,如果能澄清我在这里提出的任何其他主张,我将不胜感激。提前谢谢

ODBC和JDBC是等效的。它们都使用驱动程序将ODBC(或JDBC)调用转换为本机数据库命令。ODBC较旧,是用C/C++编写的,而JDBC是用Java编写的。当JDBC问世时,大多数数据库都没有JDBC驱动程序,因此他们创建了JDBC-ODBC驱动程序,以允许人们利用已经可用的ODBC驱动程序。现在很少使用它,因为几乎每个数据库都有一个纯Java JDBC驱动程序
  • Jdbc是使用java编写的Dricer(自JDBC4以来)连接到数据库的java方式
  • ODBC是MS Windows连接数据库的方式,这些驱动程序通常用C编写
  • JDBC-ODBC桥相当古老,在java的早期,JDBC版本中并没有所有的驱动程序可用,因此需要在JDBC和现有ODBC驱动程序之间构建一个通用桥

    • 你就快到了。好问题

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

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

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

      它们做什么:与ODBC相同。用于访问关系数据库的标准化JavaAPI

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

      仅仅因为数据库使用“标准”SQL(这在引号中是有原因的),并不意味着数据库使用相同的低级协议进行通信。SQL只是一种语法,而不是一种协议

      Postgres和(比如)Oracle的协议差别很大,提供了不同的功能,尽管它们都使用类似的SQL功能

      SQL本身虽然是标准的,但在实现上有很大的差异。例如,MySQL就因为没有其他DBs那么符合SQL而臭名昭著。虽然今天使用的许多SQL都可以跨DBs移植,但也有许多SQL不能移植

      JDBC和ODBC是志同道合的。它们提供了一个共享接口,您的应用程序可以使用该接口与RDB通信。它们还提供了供供应商实施的通用模型。这些是司机

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


      JDBC/ODBC桥是与现有ODBC驱动程序对话的JDBC驱动程序。真讨厌。不要用它。现在每个值得注意的数据库都有JDBC驱动程序。如果可能的话,请坚持使用“Type4”JDBC驱动程序,因为它们是本机Java驱动程序,而不是使用JNI转换为二进制的“Type2”驱动程序。Buggy类型4驱动程序会给出异常,Buggy类型2驱动程序会导致JVM崩溃,从而导致appserver崩溃。不,谢谢。

      你说得对;你很快就能了解全貌了

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

      让我们具体谈谈JDBC她