JDBC-接口的实现

在JDBC中,为了在DB中连接和执行语句,我们主要使用Connection,Statement和ResultSet作为接口。 但是它们的相应对象后来用于运行createStatement(),executeQuery(),next()等方法。哪些类实现了这些方法? 为什么它被称为连接对象而不是实现的类对象?

在JDBC中,您首先通过调用注册驱动程序

Class.forName('classname') 

它加载Database类并使用DriverManager注册该类

当你说DriverManager.getConnection( ) – 它返回java.sql.Connection (根据规范的合同)

哪个类实现了这些方法?

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

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

因为您编写了接口而不是实现 (良好的编码实践)。

如果你想要,你可以在供应商jar中查找并找到哪个类实现Connection,而不是

 Connection connection = DriverManager.getConnection() 

你可以写

 VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection() 

上面的内容将有效,但它将绑定您与该特定的实现。

如果您想从vendor1迁移到vendor2,则无法执行此操作,首先您必须根据vendor2 API更改上述代码,但如果您使用第一种方法,则可以从Vendor转移到Vendor,而无需更改代码。

你实际上并没有这样做

 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); 

但是直接回答你的问题不能你实例化一个Interface你必须使用一个implements Interface或使用代理的类。

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

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

您需要通过创建自己的类来实际实现接口。 因此,创建一个实现接口的类,包含正确的抽象方法,然后在新类中添加您想要的function。 然后,您将实例化该类以使用这些函数。

接口就像一个编程“契约”,它确保扩展接口的任何类都能实现某些function,但是,你不能实例化接口本身来使用它的’方法,你inheritance它们/在你的方法中覆盖它们新课。 在覆盖新类中的抽象方法之后,您可以编写任何您希望特定接口扩展类执行的操作。

http://www.javabeginner.com/learn-java/java-abstract-class-and-interface和http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract。 html将让您阅读这些主题。