我们知道我们不能创建接口的对象但是我们如何在jdbc中创建Statement或PrepareStatement的对象?

时间:2014-04-18 07:27:56

标签: java

Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();

1 个答案:

答案 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接口,则保证这是有保证的。不关心实际使用的是哪个数据库。