Java JDBC-接口的实现

Java JDBC-接口的实现,java,jdbc,Java,Jdbc,在JDBC中,连接和执行数据库中的语句主要使用连接、语句和结果集作为接口。但它们对应的对象后来被用来运行createStatement()、executeQuery()、next()等方法。哪个类实现了这些方法? 为什么它被称为连接对象而不是实现的类对象?您不能实例化接口类。您可以自己实现该接口,也可以使用创建该接口的实例,该实例将所有调用委托给提供的接口。您不能实例化接口类。您可以自己实现该接口,也可以使用该接口创建该接口的实例,该实例将所有调用委托给提供的接口。您实际上没有这样做 Conne

在JDBC中,连接和执行数据库中的语句主要使用连接、语句和结果集作为接口。但它们对应的对象后来被用来运行createStatement()、executeQuery()、next()等方法。哪个类实现了这些方法?
为什么它被称为连接对象而不是实现的类对象?

您不能实例化接口类。您可以自己实现该接口,也可以使用创建该接口的实例,该实例将所有调用委托给提供的接口。

您不能实例化接口类。您可以自己实现该接口,也可以使用该接口创建该接口的实例,该实例将所有调用委托给提供的接口。

您实际上没有这样做

Connection conn = new Connection();
你做的事情

Connection conn = DriverManager.getConnection(
     DB_PATH + "?user=" + USER_NAME + "&password=" + USER_PASS); 
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(query);
但是要直接回答您的问题,您不能实例化
接口
,您必须使用
实现
接口
的类或使用代理。

您实际上没有这样做

Connection conn = new Connection();
你做的事情

Connection conn = DriverManager.getConnection(
     DB_PATH + "?user=" + USER_NAME + "&password=" + USER_PASS); 
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(query);

但是要直接回答你的问题,不,你不能实例化一个
接口
,你必须使用一个
实现
接口
的类,或者使用一个代理。

这些人回答了你的问题,但我不认为你是从评论中得到的

您需要通过创建自己的类来实际实现接口。因此,创建一个实现接口的类,包括正确的抽象方法,然后向新类中的功能添加您想要的任何内容。然后您将实例化该类以使用函数

接口就像一个编程“契约”,它的存在是为了确保任何用于扩展接口的类都能实现某些功能,然而,你不能实例化接口本身来使用它的方法,而是在你的新类中继承/重写它们。重写新类中的抽象方法后,您可以在希望特定接口扩展类执行的任何其他操作中编程


这些人正在回答你的问题,但我不认为你是从评论中得到的

您需要通过创建自己的类来实际实现接口。因此,创建一个实现接口的类,包括正确的抽象方法,然后向新类中的功能添加您想要的任何内容。然后您将实例化该类以使用函数

接口就像一个编程“契约”,它的存在是为了确保任何用于扩展接口的类都能实现某些功能,然而,你不能实例化接口本身来使用它的方法,而是在你的新类中继承/重写它们。重写新类中的抽象方法后,您可以在希望特定接口扩展类执行的任何其他操作中编程


将让您阅读这些主题。

在JDBC中,您首先通过调用

Class.forName('classname')
它加载数据库类并将该类注册到
DriverManager

当您说
DriverManager.getConnection(
)时,它将返回您
java.sql.Connection
(根据规范的合同)

哪个类实现了这些方法

实际实现由数据库供应商提供,例如Oracle、MySQL

为什么它被称为连接对象而不是实现类 反对

因为你(良好的编码实践)

如果您愿意,您可以在供应商jar中查找并找到实现连接的类,而不是

Connection connection = DriverManager.getConnection()
你可以写

VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection()
上述方法将起作用,但随后它会将您与特定的实现绑定在一起


如果您想从vendor1移动到vendor2,您不能这样做,首先您必须根据vendor2 API更改上述代码,但是如果您使用第一种方法,您可以从一个供应商移动到另一个供应商,而不必痛苦地更改代码。

在JDBC中,您首先通过调用

Class.forName('classname')
它加载数据库类并将该类注册到
DriverManager

当您说
DriverManager.getConnection(
)时,它将返回您
java.sql.Connection
(根据规范的合同)

哪个类实现了这些方法

实际实现由数据库供应商提供,例如Oracle、MySQL

为什么它被称为连接对象而不是实现类 反对

因为你(良好的编码实践)

如果您愿意,您可以在供应商jar中查找并找到实现连接的类,而不是

Connection connection = DriverManager.getConnection()
你可以写

VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection()
上述方法将起作用,但随后它会将您与特定的实现绑定在一起


如果您想从vendor1移动到vendor2,您不能这样做,首先您必须根据vendor2 API更改上述代码,但如果您使用第一种方法,您可以从一个供应商移动到另一个供应商,而不必更改代码。

希望以下解释能有所帮助。

问:驱动程序连接实现来自哪里?以及语句和结果集的实现

Class.forName(“com.mysql.jdbc.Driver”).newInstance();
//String url=“jdbc:mysql://localhost:3306/mydb?user=root&password=root";
Connection con=DriverManager.getConnection(url);
小提示:一旦加载(初始化)DriverManager类,就会加载驱动程序实现。

以mysql连接器java:5.1.36的源代码为例

● 类com.mysql.jdbc.Driver扩展类非注册驱动程序,其中有一个名为connect()的方法,该方法返回连接实例。
请注意非注册驱动程序的registeredDrivers字段