JDBC驱动程序类型号之间的区别

时间:2010-03-04 17:25:25

标签: java sql database jdbc drivers

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

  1. Type 1 Driver
  2. Type 2 Driver等..到Type 4
  3. 为什么他们得到类型1,类型2等名称?有什么逻辑吗?

5 个答案:

答案 0 :(得分:22)

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

  1. 通过ODBC API
  2. 通过DB供应商特定的API(使用JNI calls在Windows中的DLL文件中)。
  3. 通过通用网络协议(使用sockets,例如TCP / IP协议)。
  4. 通过DB供应商特定的网络协议(仍然带有套接字)。
  5. 一般情况下(只是巧合),类型编号越高,JDBC驱动程序的执行效果越好。

答案 1 :(得分:9)

我相信它可以追溯到Sun的原创(1997)intro to JDBC

  

我们知道的JDBC驱动程序   此时一般都适合其中之一   四类:

     
      
  1. JDBC-ODBC桥加ODBC驱动程序:JavaSoft桥产品   通过ODBC驱动程序提供JDBC访问。   注意ODBC二进制代码,并在   很多情况下数据库客户端代码必须   在每台客户机上加载   使用此驱动程序。结果,这个   那种司机是最合适的   客户端的企业网络   安装不是主要问题,   或者为应用服务器代码编写   在Java中采用三层架构。

  2.   
  3. Native-API部分Java驱动程序:这种驱动程序转换JDBC   调用客户端API上的调用   Oracle,Sybase,Informix,DB2或   其他DBMS。请注意,像桥一样   司机,这种风格的司机需要   加载一些二进制代码   每台客户机。

  4.   
  5. JDBC-Net纯Java驱动程序:此驱动程序将JDBC调用转换为   与DBMS无关的网络协议   然后通过转换为DBMS协议   一台服务器。这个网络服务器中间件   能够连接其纯Java   客户到许多不同的数据库。   使用的具体协议取决于   供应商。一般来说,这是   最灵活的JDBC替代品。它是   可能是所有这些供应商   解决方案将提供产品   适合内网使用。为了   对于这些产品也支持   互联网接入,他们必须处理   额外的安全要求,   通过防火墙访问,等等   第四,网络强加的。

  6.   
  7. Native-protocol纯Java驱动程序:这种驱动程序转换   JDBC调用网络协议   由DBMS直接使用。这允许一个   从客户端机器直接调用   DBMS服务器并且非常出色   内部网访问解决方案。以来   许多这些协议都是   专有的,数据库供应商   他们自己将是主要来源。   几个数据库供应商都有这些   进展。

  8.         

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


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

答案 2 :(得分:4)

这些数字不是很有用。我发现按照以下方式思考它会更有用:

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

简而言之,每个Type都使用不同的策略,并且对于不同类型的实现更有效。我不认为这是懒惰。我认为能够更轻松,更清楚地找出哪种类型最适合您的特定情况。