4

我正在使用包 java.sql 中的接口连接

实际上我虽然它是一个类,但是当我试图查看源代码时,我发现它是一个接口。

在 Connection 接口的源代码中,每个方法只有一行,没有任何实现!!

是什么让这个界面如此运作?

要连接的数据库:MySql

连接源代码页: http: //www.docjar.com/html/api/java/sql/Connection.java.html

4

3 回答 3

11

它不是“工作”的接口,而是它的一种实现,它特定于您的特定 RDBMS 供应商。事实上,通常是供应商提供Connection接口的实现。

你打电话时

Connection conn = DriverManager.getConnection(
    "jdbc:jdbc:mysql://localhost:3306/
,    connectionProps);

驱动程序管理器搜索已注册的 JDBC 驱动程序,找到 MySQL 的驱动程序(它从连接字符串中知道它是 MySQL),将连接属性传递给 MySQL JDBC 驱动程序中实现的类的构造函数,Connection并将结果Connection实例返回给您。例如,驱动程序可能会返回实现 的包私有类的实例MySqlConnectionConnection并且您的程序将使用它与 RDBMS 交互,而不需要知道有关该类的任何细节,除了它实现的事实Connection

于 2012-07-22T22:19:37.803 回答
2

MySQL 驱动程序 ( http://www.mysql.com/products/connector/ ) 包含实际的实现。java.sql.Connection 接口只定义了 JDBC 标准所期望的方法。每个数据库驱动程序都必须定义如何实际连接。

于 2012-07-22T22:18:39.163 回答
1

以下是一些直接或间接实现 java.sql.Connection 接口的类示例:

  • oracle.jdbc。OracleConnection 包装器
  • com.mysql.jdbc。ConnectionImpl
  • com.microsoft。sqlserver.jdbc。SQLServerConnection

通过包命名空间,您可以知道它们来自哪个 jdbc 驱动程序。但是这些和其他实现类不能直接使用。正如 dasblinkenlight 所指出的,您应该针对 JDBC API 进行编程,而不是针对每个 JDBC 驱动程序库中提供的类进行编程。使用 API 将允许您切换 RDBMS 而不会破坏您的 java 数据访问代码。

有趣的是,现在使用 JDBC API 的人越来越少。许多人使用构建在 JDBC 之上的对象关系映射框架,例如 Hibernate。

于 2013-05-01T14:56:44.160 回答