我已经了解到Connection是一个接口,我们只能在接口中定义方法定义。 那么这是如何工作的:
...
Statement stmt = con.createStatement();
...
此方法如何创建Statement对象并将其返回?
答案 0 :(得分:1)
因为在调用Connection
时返回了getConnection()
接口的具体实现。界面只是定义了方法签名。具体实现包含方法实现。
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println(connection.getClass().getName()); // That's the name of the concrete implementation.
这是包含那些具体实现的JDBC驱动程序。 JDBC API使您能够独立于所使用的特定数据库服务器编写Java代码。无论何时切换数据库,您只需切换JDBC驱动程序(并且可能还会更改SQL语句,只要它们包含特定于DB服务器的SQL语言,而不是Java代码)。
答案 1 :(得分:0)
看看这个例子。 这个概念与此类似。
public interface Human
{
public void run();
}
public class Man implements Human
{
public void run()
{
System.out.println("Man");
}
}
public class Main
{
public static void main(String s)
{
Human h= new Man();
h.run();
}
}
此程序的输出为Man
。
现在将此与您的问题进行比较。
Connection con = DriverManager.getConnection(url, username, password)
,
con没有指向连接对象,因为它是一个接口,它指向一些肯定继承Connection
接口的类。
现在当你这样做
Statement stmt = con.createStatement();
它不调用Connection
接口方法,它调用con实际引用的方法。
所以你甚至不知道它会返回什么,加上stmt肯定会指向哪个类
继承了Statement
接口。