gpt4 book ai didi

java - 为什么 createStatement 方法声明在 Connection 接口(interface)下,而不是声明在 Statement 接口(interface)下?

转载 作者:行者123 更新时间:2023-11-29 04:34:55 31 4
gpt4 key购买 nike

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

在编写代码时,我遇到了两个接口(interface),一个是连接,另一个是语句。使用以下代码片段建立连接后。

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

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

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

我的问题是,如果大部分时间都需要 Statement 对象,那么为什么要在 Connection 接口(interface)中声明 createStatement()。为什么没有声明在Statement接口(interface)下?是否有任何我真的不知道的具体原因?

最后,下面的代码用于获取对对象的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;
}


}

最佳答案

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

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

因此决定作为 Connection 职责的一部分来实例化一个。

关于java - 为什么 createStatement 方法声明在 Connection 接口(interface)下,而不是声明在 Statement 接口(interface)下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661964/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com