3

最近发现下面程序中用到的Statement、Connection和ResultSet都是接口。该程序运行良好,但谁实现了这些接口?

package jdbc;

import java.sql.*;

public class Mango {

    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");   
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@66.66.66.128:1521:xe","SYSTEM","matrix");
        Statement comm = con.createStatement();
        comm.executeQuery("insert into a values('a',1)");
        ResultSet res = comm.executeQuery("SELECT * FROM A");
        comm.executeQuery("insert into a values('a',1)");
        while(res.next()) {
            System.out.println(res.getString(1) + " " + res.getInt(2));
        }
    }

}
4

5 回答 5

8

接口 Statement、Connection 和 ResultSet 最终由第三方 JDBC Driver 提供者实现。

假设如果您使用的是 MySQL 驱动程序,这就是实现层次结构的方式,

  1. java.sql.Statement 接口最终由 com.mysql.jdbc.StatementImpl 类实现。

内部实现层次结构:

com.mysql.jdbc.StatementImpl(Class) -->implements--> com.mysql.jdbc.Statement(interface) -->extends--> java.sql.Statement(interface)

  1. java.sql.Connection 接口最终由 com.mysql.jdbc.JDBC4Connection 类实现。

内部实现层次结构:

com.mysql.jdbc.JDBC4Connection(Class) -->extends--> com.mysql.jdbc.ConnectionImp(Class) -->extends--> com.mysql.jdbc.ConnectionPropertiesImpl(Class) -->implements--> com.mysql.jdbc.MySQLConnection(Interface) -->extends--> com.mysql.jdbc.Connection(Interface) -->extends--> java.sql.Connection(Interface)

  1. java.sql.ResultSet 接口最终由 com.mysql.jdbc.ResultSetImpl 类实现。

内部实现层次结构:

com.mysql.jdbc.ResultSetImpl(Class) -->implements--> com.mysql.jdbc.ResultSetInternalMethods(Interface) -->extends--> java.sql.ResultSet(Interface)

于 2015-11-19T09:38:38.210 回答
2

JDBC API 是通过各种数据库软件供应商提供的 JDBC 驱动程序实现的。

JDBC 驱动程序是一组实现 JDBC 接口以处理 JDBC 调用并将结果集返回给 Java 应用程序的类

于 2013-06-16T19:29:30.777 回答
1

JDBC 驱动程序提供程序提供了您可以执行此操作的实现。在这种情况下,甲骨文。

 System.out.println("con class is "+ con.getClass());
 System.out.println("comm class is "+ comm.getClass());
 System.out.println("res class is "+ res.getClass());

顺便说一句,当你完成资源时不要忘记关闭你的资源,否则你可以获得记忆。

于 2013-06-16T18:52:42.507 回答
1

这些类型的接口的实现是特定于供应商的。例如,如果您使用的是 Mysql,并且您已将 Mysql Jar 放在类路径中,那么实现类如下所示:

1. java.sql.Statement [Interface] -> com.mysql.jdbc.StatementImpl [Class]

2. java.sql.Connection [Interface] -> com.mysql.jdbc.MySQLConnection [Interface] -> com.mysql.jdbc.ConnectionImpl [Class]

3. java.sql.ResultSet [Interface] -> com.mysql.jdbc.ResultSetImpl [Class]
于 2013-09-25T12:25:03.273 回答
0

数据库供应商提供 JDBC-ODBC 驱动程序与数据库通信的第 3 方驱动程序。这些第 3 方驱动程序具有某些实现接口并根据要求编写其主体的类。因此,当您从 mysql 数据库移动到 oracle 数据库时,驱动程序的主体会发生变化。

于 2014-12-26T16:56:03.853 回答