我正经历一个大疑问。今天我练习数据库连接并从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;
}
}
答案 0 :(得分:4)
createStatement()
方法不是静态的。它依赖于Connection
数据。如果在Statement接口中将方法创建为静态,则需要将Connection实例作为输入参数。
不同的Connection
实现可能以不同的方式(以及不同的实现方式)实例化Statements
。
因此决定成为实例化Connection
责任的一部分。