JDBC驱动程序类型编号的区别

19

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

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

为什么它们被称为类型1、类型2等?这里有任何的逻辑吗?

5个回答

22

类型编号表示驱动程序实际上如何与数据库通信。

  1. 通过ODBC API
  2. 通过特定于DB供应商的API(在Windows上使用JNI调用例如DLL文件)。
  3. 通过通用网络协议(使用sockets例如TCP/IP协议)。
  4. 通过特定于DB供应商的网络协议(仍然使用sockets)。

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


供应商特定意味着“本地化”,这有助于一点。 - Premraj

10

我相信这可以追溯到Sun公司最初(1997年)的JDBC入门

我们目前了解的JDBC驱动程序通常可以归为以下四类:
1. JDBC-ODBC桥加ODBC驱动程序:JavaSoft桥接产品通过ODBC驱动程序提供JDBC访问。请注意,ODBC二进制代码以及在许多情况下数据库客户端代码必须加载到使用此驱动程序的每个客户机上。因此,这种类型的驱动程序最适用于企业网络,其中客户端安装不是主要问题,或者适用于在三层架构中用Java编写的应用程序服务器代码。
2. 本机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服务器,是Intranet访问的一个很好的解决方案。由于许多这些协议是专有的,数据库供应商本身将是主要来源。几个数据库供应商正在进行这方面的工作。
预计最终驱动程序类别3和4将成为从JDBC访问数据库的首选方式。驱动程序类别1和2是直接纯Java驱动程序尚未可用的过渡解决方案。类别1和2(未在下表中显示)可能会有一些变化,需要连接器,但这些通常不是最理想的解决方案。类别3和4提供了Java的所有优势,包括自动安装(例如,通过使用它的小应用程序下载JDBC驱动程序)。
请注意,它们实际上并没有将它们命名为Type 1、2、3和4,而是JDBC-ODBC桥加ODBC驱动程序、本地API部分Java驱动程序、JDBC-Net纯Java驱动程序和本地协议纯Java驱动程序。每个名称都很冗长,因此人们立即开始用它们的编号来称呼它们。

遗憾的是,Oracle似乎没有保留旧Sun文档的链接。 - Matthew Flynn

4

这些数字并不是很有信息量。我认为按照以下方式来思考更有用:

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

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


0

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

看起来没有任何逻辑,只是纯粹的懒惰吧!

更新:问题是为什么称之为类型1、类型2等,而不是称之为苹果类型、橙子类型等。我知道驱动程序类型是不同的,并且根据情况工作/不工作,但为什么要用“类型1”这个名称,而不是“类型JDBC-ODBC”或“类型JO”,我不知道有什么理由。


有些逻辑性在其中 - 知道驱动程序类型可以帮助您了解驱动程序在什么情况下有效。例如,如果您无法部署本地代码(比如在 applet 中),使用本地代码的驱动程序将不起作用。 - Eric Petroelje

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接