Вопрос по java – JDBC - реализация интерфейсов

0

В JDBC для соединения и выполнения операторов в БД мы в основном используем Connection, Statement и ResultSet, которые являются интерфейсами. Но их соответствующие объекты позже используются для запуска таких методов, как createStatement (), executeQuery (), next () и т. Д. Какой класс реализует эти методы? Почему он называется объектом соединения, а не реализованным объектом класса?

Ваш Ответ

4   ответа
0

Вы не можете создать экземпляр класса интерфейса. Вам придется либо внедрить этот интерфейс самостоятельно, либо использоватьполномочие создать экземпляр указанного интерфейса, который будет делегировать все вызовыInvocationHandler.

0

Эти парни отвечают на ваш вопрос, но я не думаю, что вы получаете его из комментариев.

Вам нужно реализовать интерфейс, создав собственный класс. Поэтому создайте класс, который реализует интерфейс, включите правильные абстрактные методы, а затем добавьте все, что вы хотите, к функциональности в вашем новом классе. Затем вы создадите экземпляр этого класса для использования функций.

Интерфейс подобен программному «контракту» это необходимо для того, чтобы убедиться, что любой используемый класс, расширяющий интерфейс, выполняет определенные функции, однако вы не можете создать экземпляр самого интерфейса, чтобы использовать его. методы, вы наследуете их / переопределяете их в своем новом классе. После того, как вы переопределите абстрактные методы в своем новом классе, вы можете программировать все, что хотите, чтобы ваш конкретный класс расширения интерфейса делал.

http://www.javabeginner.com/learn-java/java-abstract-class-and-interface а также http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html позволит вам читать по этим темам.

Понизить связь между основными понятиями, которые этот человек, похоже, не понимает? ОП явно борется с наследованием и интерфейсами, и предыдущие ответы не указывали на фоновые материалы.
2

В 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, не беспокоясь об изменении своего кода.

Чтобы вызвать Cobject.methodinC (), вы должны сделать что-то вроде C Cobject = new CImpl (); Во время выполнения будет использоваться CImpl, пожалуйста, создайте новый вопрос в следующий раз
Я просто пытаюсь понять концепцию. это класс, который мы загружаем в Class.forName () для реализации этих методов? freshDroid
Скажем, для MySQL класс, реализующий интерфейс java.sql.Connection, - это com.mysql.Connnection, аналогично для Driver, PreparedStatement и других.
Начиная с JDBC 4 (Java 6) больше нет необходимости «загружать»; водитель, использующийClass.forName (если вы используете драйвер, совместимый с JDBC 4)
k.Если класс A и класс B реализуют интерфейс C. Если я сказал Cobject.methodinC (), как компилятор знает, какую реализацию следует рассмотреть? freshDroid
2

Вы на самом деле не делаете

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 или используйте прокси.

к. Но мой вопрос в том, какой класс реализуют методы интерфейса createStatement (), executQuery ()? freshDroid
каждый класс, который реализуетStatement интерфейс должен переопределитьexecuteQuery() метод (как и любые другие методы интерфейса). Какой из них вы используете, зависит от того, какconn.createStatement() работает и что он на самом деле возвращает.
Я знаю, что. Мы использовали для создания объекта класса, который реализует интерфейс и вызывает соответствующий метод этого интерфейса ... но здесь он напрямую вызывает метод с объектом интерфейса. Как методы переопределяются без класса? freshDroid
Я не пытаюсь реализовать этот интерфейс в моем классе. Я просто хочу знать концепцию использования объекта интерфейса и доступа к методам этого интерфейса, например Statement.executeQuery (query). freshDroid
Если вы хотите, чтобы фактическое имя класса вы распечаталиconn.getClass() и он скажет вам имя, но вы действительно не должны использовать конкретный классJDBC предназначен для работы через свои интерфейсы.

Похожие вопросы