package org;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class DatabaseConn {
public static void main(String[] args) {
System.out.println("Loading driver...");
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded!");
} catch (ClassNotFoundException e) {
throw new IllegalStateException("Cannot find the driver in the classpath!", e);
}
try {
String host = "jdbc:mysql://localhost:3306/sys";
String username = "root";
String password = "root";
Connection Con = DriverManager.getConnection(host, username, password);
Statement stmnt = Con.createStatement();
String SQL = "SELECT * FROM sys_config";
ResultSet rs = stmnt.executeQuery( SQL );
System.out.println("Records:"+rs);
} catch (SQLException err) {
System.out.println(err.getMessage());
}
}
}
我对类上的接口实现的理解是,接口类型引用实现接口的类的对象。
但是当我研究下面的代码片段在上面的代码中使用时…
Connection Con = DriverManager.getConnection(host, username, password);
GetConnection(host,username,password)返回对对象的引用(类型为Connection),但DriverManager类中没有实现接口。谁能澄清我的这个疑问..?还是我漏掉了什么?
下面的代码段不能得到相同的东西
Statement SQL = Con.createStatement();
createStatement()应该返回对实现语句接口的对象的引用。但是这个连接接口是由ConnectionImpl类实现的,实现如下所示
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;
}
}
让我们一点一点来看看:
DriverManager.GetConnection(主机,用户名,密码)
返回对对象得引用(类型为Connection
)...
这是正确的。
...但在类DriverManager
中没有实现接口。
这也是正确的。
您的解释缺少的是DriverManager.getConnection()
没有返回对DriverManager
的引用。它返回对另一个类的对象的引用,这个类确实实现了connection
接口。
为了便于论证,假设有一个名为mysqlconnection
的类:
class MySqlConnection implements Connection {
...
}
现在,DriverManager.getConnection()
可以很好地返回该类的实例:
class DriverManager {
public Connection getConnection(...) {
return new MySqlConnection(...);
}
}
希望这能把事情弄清楚。
问题内容: 有没有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的接口,在90%的情况下,我想要的功能是相同的。 我的第一个直觉是用静态方法创建一个具体的类。然后,当我想要默认功能时,可以将功能委托给静态方法。 这是一个简单的示例: 接口 方法的具体实现 使用默认功能的具体实现 这里有更好的方法吗? 编辑 在看到了一些建议的解决方案之后,我认为我应该更加清楚自己的意图。本质上,我正在尝试
我正在使用GraphQL工具来构建一个GraphQL模式,本质上我有这个结构 我有以下解析器 我让模式可执行 可选参数inheritResolversFromInterfaces:true应该允许我根据apollo graphql工具文档(链接)将公民身份解析程序从继承到。这样,当查询作者时,“示例公民身份”字符串将出现。 然而它没有,查询返回
问题内容: 给定以下代码,如何遍历ProfileCollection类型的对象? 问题答案: Iterable是通用接口。您可能遇到的问题(实际上并没有说出您遇到的问题,如果有的话)是,如果使用通用接口/类而不指定类型实参,则可以擦除不相关的通用类型在课堂上。 因此,我至少将其更改为: 这应该工作: 在Iterable上没有type参数的情况下,迭代器可以简化为Object类型,因此只有这样才能起
我有一个叫做InputInterface的接口,它有一些get方法。我还有一个复杂的gui类,它实现了InputInterface,现在因为它太复杂了,无法序列化整个类,而且它扩展并实现了更多的接口,所以我想创建一个类似于模拟对象的东西,它会创建一个类似于我的复杂类目前给出的答案的副本。 我想创建一个实现该接口的类,它将保存这些值,但后来我意识到这应该是EasyMock或其他模拟库的标准过程?这是
问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种
我读过很多解释接口和抽象类之间差异的文章;这些帖子特别有用:接口和抽象类之间有什么区别?接口与抽象类(通用面向对象);然而,我找不到任何具体解决我问题的答案。 上下文:今天在课堂上,我们编写了一个接口和两个实现接口的类: 我知道这是可能的,因为它有效;我的问题是它为什么有效?我知道子类与其超类有ISA关系,但接口根本不是类,那么继承仍然适用于它们吗?实现多个接口的类是否与这些接口有ISA关系? 这