2013-12-13 2 views
2

В соответствии с javadoc метод createStatement() создает экземпляр Statement для отправки операторов SQL в базу данных.Как метод createStatement() возвращает объект Statement?

Statement является interface под пакетом java.sql, и я понимаю, что невозможно создать экземпляр интерфейса в Java.

Тогда как это работает? В источнике я нашел это, только не понимаю.

/** 
* Creates a <code>Statement</code> object for sending 
* SQL statements to the database. 
* SQL statements without parameters are normally 
* executed using <code>Statement</code> objects. If the same SQL statement 
* is executed many times, it may be more efficient to use a 
* <code>PreparedStatement</code> object. 
* <P> 
* Result sets created using the returned <code>Statement</code> 
* object will by default be type <code>TYPE_FORWARD_ONLY</code> 
* and have a concurrency level of <code>CONCUR_READ_ONLY</code>. 
* The holdability of the created result sets can be determined by 
* calling {@link #getHoldability}. 
* 
* @return a new default <code>Statement</code> object 
* @exception SQLException if a database access error occurs 
* or this method is called on a closed connection 
*/ 
Statement createStatement() throws SQLException; 
+0

conn.createStatement() не означает, что есть код, как "новое заявление() существует в методе. – Loc

+4

Функция createStatement возвращает ссылку на объект, реализующий интерфейс Statement. – DwB

+2

Связанный: http://stackoverflow.com/questions/7550612/in-simplest-terms-what-is-a-factory/ – BalusC

ответ

4

Для работы необходим драйвер JDBC. Драйвер JDBC реализует интерфейсы, описанные в java.sql. Реализация драйвера Connection имеет реализацию метода createStatement, который возвращает реализацию оператора Statement.

JDBC предлагает предоставить поставщикам индивидуальные реализации JDBC для конкретных поставщиков, предоставляя пользователям единый интерфейс. База данных содержит драйвер JDBC драйвер реализует интерфейсы: Если вы смотрите в файле фляги для драйвера JDBC вы увидите много конкретных поставщиков классов, как:

WhateverRdbmsConnectionImpl 
WhateverRdbmsPreparedStatementImpl 
... 

и т.д., где каждый инвентарем интерфейс java.sql.

Таким образом, вы можете увидеть

public class WhateverRdbmsConnectionImpl implements java.sql.Connection { 

    public java.sql.Statement createStatement() throws java.sql.SQLException { 
     WhateverRdbmsStatementImpl stmt = new WhateverRdbmsStatementImpl(); 
     ... 
     return stmt; 
    } 
} 

createStatement обязан вернуть то, что реализует интерфейс java.sql.Statement, производители предоставляют свои собственные реализации.

+0

не получил ваш ответ. – Dhruv

2

Вот несколько примеров кода:

interface IBlammy 
{ 
    public String blam(); 
} 

class BlammyImpl 
implements IBlammy 
{ 
    public String blam() 
    { 
     return "kapow"; 
    } 
} 


class Hooty 
{ 
    public IBlammy getStatement() 
    { 
     return new BlammyImpl(); 
    } 
} 

Hooty.getStatement() возвращает ссылку на объект, который реализует интерфейс IBlammy.

2

Вы смотрите на источник для интерфейса из Connection, не класса. Интерфейсы не содержат какой-либо реализации - они просто определяют контракт, а классы, реализующие этот интерфейс, обязаны реализовать все на этом интерфейсе.

http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html

Смежные вопросы