Lea*_*ava 2 java mysql interface
我正在经历一个很大的疑问。今天我在练习数据库连接和从MySQL数据库中的表中读取记录。一切正常。
在编码时我遇到了两个接口,一个是连接,第二个是语句。使用下面的代码片段建立连接后。
Connection Con = DriverManager.getConnection(host, username, password);
Run Code Online (Sandbox Code Playgroud)
我必须创建一个 Statement 对象,该对象将用于执行 SQL 查询。所以我喜欢这个并且能够获得记录。
Statement stmnt = Con.createStatement();
String SQL = "SELECT * FROM sys_config";
ResultSet rs = stmnt.executeQuery( SQL );
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果大多数时候都需要 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;
}
}
Run Code Online (Sandbox Code Playgroud)
该createStatement()方法不是静态的。它依赖于Connection数据。如果方法在 Statement 接口中创建为静态,则需要请求 Connection 实例作为输入参数。
不同的Connection实现可能Statements以不同的方式(以及不同的实现)进行实例化。
所以决定成为Connection实例化一个的责任的一部分。