jdbc是如何工作的

Posted

技术标签:

【中文标题】jdbc是如何工作的【英文标题】:How does jdbc work 【发布时间】:2010-04-26 20:46:25 【问题描述】:

谁能告诉我 jdbc 是如何工作的?它是如何与 DBMS 进行通信的?因为 DBMS 可能是用其他编程语言编写的。

【问题讨论】:

【参考方案1】:

与数据库的通信由 JDBC 驱动程序处理,这些驱动程序可以使用各种策略与数据库“对话”(从“翻译”到使用“本地”语言)。根据使用的策略,驱动程序分为 4 种类型。 Types of JDBC technology drivers 对它们中的每一个进行了很好的描述:

    JDBC-ODBC 桥通过一个或多个 ODBC 提供 JDBC API 访问 驱动程序。 请注意,某些 ODBC 原生 代码,在许多情况下是本地数据库 客户端代码必须加载到每个 使用这种类型的客户端机器 司机。因此,这种驱动程序是 通常最合适的时候 自动安装和下载 Java 技术应用程序是 不重要。有关信息 JDBC-ODBC 桥驱动程序由 Sun,请参阅 JDBC-ODBC 桥驱动程序。

    本地 API 部分支持 Java 技术的驱动程序可以转换 JDBC 调用到客户端上的调用 API 适用于 Oracle、Sybase、Informix、DB2、 或其他 DBMS。请注意,像 桥司机,这种风格的司机 需要一些二进制代码 加载到每台客户端机器上。

    完全支持 Java 技术的网络协议驱动程序可转换 JDBC API 调用独立于 DBMS net 协议,然后被翻译 由服务器发送到 DBMS 协议。这 网络服务器中间件能够 连接它所有的Java 许多基于技术的客户 不同的数据库。具体的 使用的协议取决于供应商。 一般来说,这是最灵活的 JDBC API 替代方案。这有可能 该解决方案的所有供应商都将 提供适合内网的产品 采用。为了让这些产品 还支持他们必须的 Internet 访问 处理额外的要求 安全,通过防火墙访问, 等等,是网络强加的。一些 供应商正在添加 JDBC 基于技术的驱动程序 现有的数据库中间件产品。

    本机协议完全支持 Java 技术的驱动程序可以转换 JDBC技术调用网络 DBMS 直接使用的协议。这 允许从客户端直接调用 机器连接到 DBMS 服务器,并且是 Intranet的实用解决方案 使用权。由于许多这些协议 是专有的数据库供应商 他们自己将是主要来源 对于这种风格的司机。一些 数据库供应商有这些 进展。

正如我们所见,有多种策略可以使互操作性成为可能,包括在 Java(类型 4)中实现给定数据库使用的网络协议。而且由于它们易于使用(无需安装额外的东西,无需 JNI)和良好的性能(它们现在的性能与 2 类驱动程序一样好),4 类实际上是当今最常用的。

【讨论】:

【参考方案2】:

来自Wikipedia:

JDBC 驱动程序是客户端适配器(安装在客户端 机器,而不是服务器上)转换来自 Java 程序的请求 到 DBMS 可以理解的协议。 [编辑] 类型

大多数关系型驱动程序都有商业和免费驱动程序可用 数据库服务器。这些驱动程序属于以下类型之一:

类型 1 调用本地可用 ODBC 驱动程序的本机代码。 在客户端调用数据库供应商本机库的类型 2。然后,此代码通过网络与数据库通信。 类型 3,纯 Java 驱动程序与服务器端中间件通信,然后与数据库通信 Type 4,使用数据库原生协议的纯java驱动

【讨论】:

根据上述答案,JDBC 驱动程序将 JDBC API 调用转换为 DBMS 可以理解的协议;那是什么协议?该协议定义是否可用,以便我们查看?【参考方案3】:

大多数数据库系统都支持 ODBC(开放式数据库连接或其他)。这意味着允许应用程序(例如,Access)以一些性能损失为代价与多个 RDBMS 实现一起工作。当 JDBC 第一次发布时,有一个驱动程序允许您连接到 ODBC 提供程序。后来,一些供应商提供了特定于其 RDMS 的 JDBC 驱动程序。

从开发人员的角度来看,JDBC 被用作一组接口。所有实际细节都隐藏在加载驱动程序中。驱动程序是一个 Java 类,可以使用本书中的任何技巧,包括本机代码或只是将网络流量发送到 RDBMS。

【讨论】:

【参考方案4】:

不能说我知道您问题的确切答案,但这里有一些信息可以提供帮助。

这是一个很好的起点:

http://java.sun.com/products/jdbc/overview.html

JDBC API 包含两组主要接口:第一组是用于应用程序编写者的 JDBC API,第二组是用于驱动程序编写者的较低级别的 JDBC 驱动程序 API。

适用于 JDBC 驱动程序开发人员的信息。基本上,开发人员实现了一组接口来为特定 DBMS 创建 JDBC 驱动程序。

http://java.sun.com/products/jdbc/driverdevs.html

就使用不同语言编写的 DBMS 而言。该 DBMS 很可能会公开一些 API(以各种语言和/或格式),允许驱动程序(例如 JDBC)与 DBMS 进行通信。

【讨论】:

【参考方案5】:

来自***:

JDBC 是一种用于 Java 编程语言的 API,它定义了客户端如何访问数据库。它提供了查询和更新数据库中数据的方法。 JDBC是面向关系型数据库的。

JDBC 最初是在 Java 2 Platform, Standard Edition, version 1.1 (J2SE) 中引入的,连同一个参考实现 JDBC-to-ODBC 桥接器,可以连接到 JVM 主机环境中任何 ODBC 可访问的数据源。

无需过多介绍,您可以将 JDBC 视为一个抽象层,让您可以与不同的数据库通信。特定于实现的细节对您隐藏,但查询数据库(无论是 mysql 还是 Oracle 或其他)的接口是相同的。

这意味着将来如果有一个新的数据库,有人只需要使用现有的接口。方法名称将相同,但方法将包含该特定数据库的特定于实现的代码。这是一种常见的软件工程模式。

包含实现特定代码的实体称为JDBC driver。 JDBC 驱动程序提供到数据库的连接,它还实现了将查询发送到数据库并将结果集发送回客户端的特定协议。

【讨论】:

【参考方案6】:

来自wikipedia page:

类型

There are commercial and free drivers available for most relational database servers. These drivers fall into one of the following types:
Type 1 that calls native code of the locally available ODBC driver.
Type 2 that calls database vendor native library on a client side. This code then talks to database over network.
Type 3, the pure-java driver that talks with the server-side middleware that then talks to database
Type 4, the pure-java driver that uses database native protocol

【讨论】:

【参考方案7】:

阅读一些关于four types of JDBC drivers 的内容可能会启发你。

【讨论】:

以上是关于jdbc是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章

通过 JDBC 进行并行化 - Pyspark - 并行化如何使用 JDBC 工作?

如何检查mysql连接的默认端口号?连接不工作! jdbc 连接

JDBC的工作原理是啥?

程序编译后 JDBC 不工作

如何MySQL JDBC驱动程序到Android工作室

ODBC效率问题