Вопрос по java – JDBC - реализация интерфейсов
В JDBC для соединения и выполнения операторов в БД мы в основном используем Connection, Statement и ResultSet, которые являются интерфейсами. Но их соответствующие объекты позже используются для запуска таких методов, как createStatement (), executeQuery (), next () и т. Д. Какой класс реализует эти методы? Почему он называется объектом соединения, а не реализованным объектом класса?
Вы не можете создать экземпляр класса интерфейса. Вам придется либо внедрить этот интерфейс самостоятельно, либо использоватьполномочие создать экземпляр указанного интерфейса, который будет делегировать все вызовыInvocationHandler.
Эти парни отвечают на ваш вопрос, но я не думаю, что вы получаете его из комментариев.
Вам нужно реализовать интерфейс, создав собственный класс. Поэтому создайте класс, который реализует интерфейс, включите правильные абстрактные методы, а затем добавьте все, что вы хотите, к функциональности в вашем новом классе. Затем вы создадите экземпляр этого класса для использования функций.
Интерфейс подобен программному «контракту» это необходимо для того, чтобы убедиться, что любой используемый класс, расширяющий интерфейс, выполняет определенные функции, однако вы не можете создать экземпляр самого интерфейса, чтобы использовать его. методы, вы наследуете их / переопределяете их в своем новом классе. После того, как вы переопределите абстрактные методы в своем новом классе, вы можете программировать все, что хотите, чтобы ваш конкретный класс расширения интерфейса делал.
http://www.javabeginner.com/learn-java/java-abstract-class-and-interface а также http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html позволит вам читать по этим темам.
В JDBC вы сначала регистрируете драйвер по телефону
Class.forName('classname')
который загружает класс базы данных и регистрирует этот классDriverManager
Когда ты сказалDriverManager.getConnection(
) - Возвращает тебяjava.sql.Connection
(договор согласно спецификации)
Which class implements these methods?
Фактическая реализация предоставляется поставщиком базы данных, например, для Oracle, MySQL.
Why it is called as connection object instead of implemented class object?
Потому что тыкод для интерфейса, а не реализация (хорошая практика кодирования).
Если вы хотите, вы можете посмотреть в вендор jar и найти, какой класс реализует соединение, а не
Connection connection = DriverManager.getConnection()
ты можешь написать
VendorConnectionImpl vendorConnection = (VendorConnectionImpl)DriverManager.getConnection()
Это выше будет работать, но тогда это свяжет вас с этой конкретной реализацией.
Если вы хотите перейти от vendor1 к vendor2, вы не можете этого сделать, сначала вам придется изменить приведенный выше код в соответствии с API vendor2, но если вы используете первый подход, вы можете перейти от Vendor к Vendor, не беспокоясь об изменении своего кода.
Class.forName
(если вы используете драйвер, совместимый с JDBC 4)
Вы на самом деле не делаете
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
или используйте прокси.
Statement
интерфейс должен переопределитьexecuteQuery()
метод (как и любые другие методы интерфейса). Какой из них вы используете, зависит от того, какconn.createStatement()
работает и что он на самом деле возвращает.
conn.getClass()
и он скажет вам имя, но вы действительно не должны использовать конкретный классJDBC
предназначен для работы через свои интерфейсы.