JDBC驱动程序是否直接与数据库通信?

时间:2015-05-26 11:40:13

标签: java jdbc driver

我对JDBC API,JDBC驱动程序和实际数据库有一些疑问。

据我所知,我们需要将JDBC驱动程序与JDBC API结合使用才能与数据库通信。

我有以下疑问:

1)JDBC API是否已完全实现,即Sun / Oracle本身是否实现了JDBC API?

2)我们需要jdbc驱动程序,这些jar需要位于尝试连接db的应用程序类路径中。现在,谁提供这些JDBC驱动程序?

3)JDBC驱动程序是JDBC API的实现吗? JDBC驱动程序和JDBC API之间有什么区别。

4)当我们编写一个与DB交互的应用程序(使用JDBC)时,jdbc驱动程序在客户端,jdbc驱动程序是否直接与数据库通信?或者这些驱动程序与之交互的数据库中是否有“软件”?这些驱动程序以哪种语言编写?

5)jdbc驱动程序如何与数据库服务器通信? (假设java应用程序在一个服务器上运行,而数据库在另一个服是内部的TCP / IP,套接字编程吗?

由于

2 个答案:

答案 0 :(得分:4)

  

1)JDBC API是否已完全实现,即自己拥有Sun / Oracle   实现了JDBC API'

不,每个数据库都必须有单独的实现。

  

2)我们需要jdbc驱动程序,这些jar需要位于尝试连接db的应用程序类路径中。现在,谁提供这些JDBC驱动程序?

通常是数据库供应商,但如果数据库具有开放式架构,则可能存在由其他人创建的备用实现。

  

3)JDBC驱动程序是JDBC API的实现吗? JDBC驱动程序和JDBC API之间有什么区别。

正是你所描述的。 API定义客户可以使用的合同,驱动程序提供该合同的实现。有些复杂的问题是JDBC API有一个单独的版本(我认为最新版本是4.2)并不是每个驱动程序都支持每个版本的API。您始终必须查看特定驱动程序的文档。

  

4)当我们编写一个与DB交互的应用程序(使用JDBC)时,jdbc驱动程序在客户端,jdbc驱动程序是否直接与数据库通信?或者是否有任何软件'在这些驱动程序与之交互的数据库中?这些驱动程序以哪种语言编写?

这取决于type of the driver。类型4驱动程序直接与数据库通信,类型3驱动程序与作为中介的中间件通信,类型2依赖于本机库,而类型1使用本地安装的ODBC驱动程序。在实践中,您遇到的99%的驱动程序将是类型2或4.例如,如果连接到Oracle数据库,则两个驱动程序分别称为OCI和THIN。

  

5)jdbc驱动程序如何与数据库服务器通信? (假设java应用程序在一个服务器上运行,而数据库在另一个服是内部的TCP / IP,套接字编程吗?

是的,它就是这样的。但API中的任何内容都没有强制要求,它只是最明显的沟通方式。有些数据库甚至会嵌入到您的应用程序中,这意味着"通信"将通过简单的本地方法调用来实现。

答案 1 :(得分:2)

  

1)JDBC API是否已完全实现,即Sun / Oracle本身是否实现了JDBC API?

我不接受你的定义。 “完全实现”并不意味着任何特别的东西,当然也不是Oracle必须这样做。 JDBC驱动程序由数据库供应商提供。

  

2)我们需要jdbc驱动程序,这些jar需要位于尝试连接db的应用程序类路径中。

呃,是的。

  

现在,谁提供这些JDBC驱动程序?

这与(1)的问题相同,答案相同。

  

3)JDBC驱动程序是JDBC API的实现吗?

  

JDBC驱动程序和JDBC API之间有什么区别。

你刚刚说了什么。

  

4)当我们编写一个与DB交互的应用程序(使用JDBC)时,jdbc驱动程序在客户端,jdbc驱动程序是否直接与数据库通信?

通常但不总是如此。定义了四个级别。这完全取决于他的实现者。

  

或者这些驱动程序与之交互的数据库中是否有“软件”?

再取决于它。

  

这些驱动程序以哪种语言编写?

JDBC驱动程序是用Java编写的,可能是本机组件。这取决于。

  

5)jdbc驱动程序如何与数据库服务器通信? (假设java应用程序在一个服务器上运行,而数据库在另一个服是内部的TCP / IP,套接字编程吗?

通常,但它又取决于。例如,对于本地MySQL服务器,它可以是Unix域套接字:对于嵌入式数据库,可能根本没有通信,只是方法调用。