19

我注意到 JDBC 有不同的驱动程序,例如:

  1. 类型 1 驱动程序
  2. 类型 2 驱动程序等到类型 4

为什么他们得到像Type 1,Type 2等这样的名字?有什么逻辑吗?

4

5 回答 5

22

类型号说明了驱动程序实际上是如何与数据库通信的。

  1. 通过ODBC API
  2. 通过 DB 供应商特定的 API(使用JNI 调用,例如 Windows 中的 DLL 文件)。
  3. 通过通用网络协议(使用带有 TCP/IP 协议的套接字)。
  4. 通过 DB 供应商特定的网络协议(仍然使用套接字)。

一般来说(只是巧合),类型编号越高,JDBC 驱动程序的性能越好。

于 2010-03-04T17:58:58.197 回答
10

我相信这可以追溯到 Sun 最初(1997 年)对 JDBC 的介绍

我们目前知道的 JDBC 驱动程序通常属于以下四个类别之一:

  1. JDBC-ODBC 桥加 ODBC 驱动程序:JavaSoft 桥接产品通过 ODBC 驱动程序提供 JDBC 访问。请注意,必须在使用此驱动程序的每台客户端计算机上加载 ODBC 二进制代码,并且在许多情况下是数据库客户端代码。因此,这种驱动程序最适用于客户端安装不是主要问题的公司网络,或者用于以 Java 编写的三层架构的应用程序服务器代码。

  2. Native-API 部分 Java 驱动程序:这种驱动程序将 JDBC 调用转换为对 Oracle、Sybase、Informix、DB2 或其他 DBMS 的客户端 API 的调用。请注意,与桥驱动程序一样,这种类型的驱动程序需要在每台客户端机器上加载一些二进制代码。

  3. JDBC-Net 纯 Java 驱动程序:此驱动程序将 JDBC 调用转换为独立于 DBMS 的网络协议,然后由服务器将其转换为 DBMS 协议。这个网络服务器中间件能够将其纯 Java 客户端连接到许多不同的数据库。使用的具体协议取决于供应商。一般来说,这是最灵活的 JDBC 替代方案。很可能该解决方案的所有供应商都将提供适合 Intranet 使用的产品。为了使这些产品也支持 Internet 访问,它们必须处理 Web 强加的安全、通过防火墙访问等附加要求。

  4. 原生协议纯 Java 驱动程序:这种驱动程序将 JDBC 调用转换为 DBMS 直接使用的网络协议。这允许从客户端机器直接调用 DBMS 服务器,是一个很好的内网访问解决方案。由于其中许多协议是专有的,因此数据库供应商本身将是主要来源。一些数据库供应商正在进行这些工作。

期望最终驱动程序类别 3 和 4 将成为从 JDBC 访问数据库的首选方式。驱动程序类别 1 和 2 是临时解决方案,其中还没有直接的纯 Java 驱动程序。需要连接器的类别 1 和 2(未在下表中显示)可能存在变化,但这些通常是不太理想的解决方案。第 3 类和第 4 类提供了 Java 的所有优点,包括自动安装(例如,通过使用它的小程序下载 JDBC 驱动程序)。


请注意,他们实际上并没有将它们命名为 Type 1、2、3 和 4,而是 JDBC-ODBC 桥加 ODBC 驱动程序、Native-API 部分 Java 驱动程序、JDBC-Net 纯 Java 驱动程序和 Native-protocol 纯 Java 驱动程序. 每个名字都是拗口,所以人们立即开始用他们的号码来称呼他们。

于 2010-03-04T22:45:46.493 回答
4

这些数字信息量不大。我发现从以下方面考虑它更有用:

  • 本地 API (1,2) 与网络协议 (3, 4)
  • 独立于数据库(奇数)与特定于数据库(偶数)

我永远记不住这些数字,但是当有人说“我们在这里使用 4 型驱动程序”时,我可以问两个是 - 否问题来了解他们在说什么。

于 2010-03-04T17:40:58.420 回答
0

简而言之,每种类型都使用不同的策略,并且对不同类型的实现效果更好。我不认为这是懒惰。我认为这是为了能够更轻松、更清晰地选择哪种类型最适合您的特定情况。

于 2010-03-04T17:29:02.187 回答
0

http://en.wikipedia.org/wiki/JDBC_driver

似乎没有任何逻辑,我猜只是单纯的懒惰!

更新:问题是是否有一些逻辑将其称为类型 1、类型 2 等而不是调用类型苹果、类型橙色:)。我知道驱动程序类型不同并且根据情况工作/不工作,但是为什么名称“Type 1”而不是“Type JDBC-ODBC”或“Type JO”没有理由 AFAIK。

于 2010-03-04T17:26:57.980 回答