为什么createStatement方法是在Connection Interface而不是Statement接口下声明的?

时间:2017-08-13 15:27:39

标签: java mysql interface

我正经历一个大疑问。今天我练习数据库连接并从MySQL数据库中的表中读取记录。一切都很好。

编码时遇到两个接口,一个是Connection,第二个是Statement。 使用以下代码段设置连接后。

Connection Con = DriverManager.getConnection(host, username, password);

我必须创建一个Statement对象,该对象将用于执行SQL查询。所以我确实喜欢这个并且能够获得记录。

Statement stmnt = Con.createStatement();
String SQL = "SELECT * FROM sys_config";
ResultSet rs = stmnt.executeQuery( SQL );

我的问题是,如果大多数时候需要Statement对象,那么为什么createStatement()Connection接口中被声明。为什么它没有在Statement接口下声明?是否有任何我不了解的具体原因?

最后,下面的代码用于获取由Statement实现的StatementImpl对象引用。

public class ConnectionImpl
  extends ConnectionPropertiesImpl
  implements Connection
{...

public Statement createStatement()
    throws SQLException
  {
    return createStatement(1003, 1007);
  }

  public Statement createStatement(int resultSetType, int resultSetConcurrency)
    throws SQLException
  {
    checkClosed();

    StatementImpl stmt = new StatementImpl(this, this.database);
    stmt.setResultSetType(resultSetType);
    stmt.setResultSetConcurrency(resultSetConcurrency);

    return stmt;
  }


}

1 个答案:

答案 0 :(得分:4)

createStatement()方法不是静态的。它依赖于Connection数据。如果在Statement接口中将方法创建为静态,则需要将Connection实例作为输入参数。

不同的Connection实现可能以不同的方式(以及不同的实现方式)实例化Statements

因此决定成为实例化Connection责任的一部分。