Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();
答案 0 :(得分:3)
创建的对象是实现该接口的类。实际的课程取决于司机。
getConnection()
和createStatement()
都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库的功能的。
DriverManager.getConnection()
的(不是真的)实现如下:
public Connection getConnection(String url, String username, String password) {
if(url.startsWith("jdbc:mysql:") // We have MySQL
return new MySQLConnection();
else if(url.startsWith("SomethingElse")
return new OtherConnection();
}
实际上,实际的类是动态加载的,因此它不需要在编译时类路径中。加载正确的类(如果找不到合适的类,则抛出错误)并返回。从那时起,MySQLConnection
类将返回MySQLStatement
等等。
您可以这样编写代码:
MySQLConnection con = (MySQLConnection)DriverManager.getConnection(url, user, pass);
但这会使您的代码数据库具体化。在某些情况下,如果MySQLConnection
类允许某些功能不在Connection
接口中,但在大多数情况下您只想处理java.sql.Connection
接口,则保证这是有保证的。不关心实际使用的是哪个数据库。