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

Java JDBC驱动程序是否直接与数据库通信?,java,jdbc,driver,Java,Jdbc,Driver,我对JDBCAPI、JDBC驱动程序和实际数据库有一些疑问 我知道我们需要JDBC驱动程序与JDBCAPI结合起来,以便与数据库通信 我有以下疑问: 1) JDBC API是否已完全实现,即Sun/Oracle自身是否已实现JDBC API 2) 我们需要jdbc驱动程序,这些JAR需要位于试图连接db的应用程序类路径中。现在,谁提供这些JDBC驱动程序 3) JDBC驱动程序是JDBCAPI的实现吗?JDBC驱动程序和JDBCAPI之间的区别是什么 4) 当我们编写一个与数据库交互的应用程序(

我对JDBCAPI、JDBC驱动程序和实际数据库有一些疑问

我知道我们需要JDBC驱动程序与JDBCAPI结合起来,以便与数据库通信

我有以下疑问:

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

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

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

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

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

谢谢

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

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

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

通常由数据库供应商提供,但如果数据库具有开放式体系结构,则可能会有其他人创建的替代实现

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

正是你所描述的。API定义了客户端可以使用的契约,驱动程序提供了该契约的实现。有点复杂的是,JDBCAPI有一个单独的版本(我认为最新的版本是4.2),并且不是每个驱动程序都支持每个版本的API。您必须始终检查特定驱动程序的文档

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

这取决于天气。类型4驱动程序直接与数据库通信,类型3驱动程序与充当中介的中间件通信,类型2依赖于本机库,而类型1使用本地安装的ODBC驱动程序。实际上,你会遇到99%的司机是2型或4型。例如,如果连接到Oracle数据库,这两个驱动程序分别称为OCI和THIN

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

是的,就是这样。但API中没有任何规定,它只是最明显的通信方式。有些数据库甚至会嵌入到应用程序中运行,这意味着“通信”将通过简单的本地方法调用来实现

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

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

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

通常由数据库供应商提供,但如果数据库具有开放式体系结构,则可能会有其他人创建的替代实现

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

正是你所描述的。API定义了客户端可以使用的契约,驱动程序提供了该契约的实现。有点复杂的是,JDBCAPI有一个单独的版本(我认为最新的版本是4.2),并且不是每个驱动程序都支持每个版本的API。您必须始终检查特定驱动程序的文档

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

这取决于天气。类型4驱动程序直接与数据库通信,类型3驱动程序与充当中介的中间件通信,类型2依赖于本机库,而类型1使用本地安装的ODBC驱动程序。实际上,你会遇到99%的司机是2型或4型。例如,如果连接到Oracle数据库,这两个驱动程序分别称为OCI和THIN

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

是的,就是这样。但API中没有任何规定,它只是最明显的通信方式。有些数据库甚至会嵌入到应用程序中运行,这意味着“通信”将通过简单的本地方法调用来实现

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

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

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

呃,是的

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

这是和(1)相同的问题,答案也是一样的

3) JDBC是驱动程序的吗