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它们/在你的方法中覆盖它们新课。 在覆盖新类中的抽象方法之后,您可以编写任何您希望特定接口扩展类执行的操作。