java - JDBC 驱动程序直接与数据库对话吗?

标签 java jdbc driver

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

我知道我们需要 JDBC 驱动程序与 JDBC API 结合才能与数据库通信。

我有以下疑问:

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

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

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

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

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

谢谢

最佳答案

1) Are JDBC API's fully implemented i.e. has Sun/Oracle themselves implemented JDBC API's?

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

2) We need jdbc drivers, and these jars need to be in the application classpath which is trying to connect db. Now, who does provide these JDBC drivers?

通常是数据库供应商,但如果数据库具有开放架构,则可能有其他人创建的替代实现。

3) Are JDBC driver's the implementation of JDBC API's? What is the difference between JDBC driver and JDBC API.

正如你所描述的那样。 API 定义了客户端可以使用的合约,驱动程序提供该合约的实现。让事情变得有些复杂的是 JDBC API 有一个单独的版本(我认为最新的版本是 4.2),并且并非每个驱动程序都支持该 API 的每个版本。您始终需要检查特定驱动程序的文档。

4) When we write an application which interacts with DB (using JDBC), the jdbc drivers are on the client side, do jdbc drivers directly talk to the database? or is there any 'software' in database to which these drivers interact with? In which language are these drivers written?

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

5) How does jdbc drivers communicate with database server? (Assuming java application running in one server and database in another server). Is it TCP/IP , socket programming internally?

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

关于java - JDBC 驱动程序直接与数据库对话吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30457496/

相关文章:

java - 在计数器模式下使用 AES 生成一次性 key

java - whatsapp如何即时收到消息?

java - 插入查询不起作用

c - 在没有驱动程序的情况下从用户模式读取内核内存

java - 如何将我创建的以下 Java 代码写入驱动程序并调用方法/类?

macos - 如何记录 Mac OS X 显卡驱动程序

java - Eclipse 下载包中没有服务器选项

java - 使用 Apache POI 生成 excel 下拉列表时的限制

postgresql - JDBCappender log4j2 和 postgres 错误

Java/JDBC - 使用 TableModels 显示单个数据