Java 我们知道我们不能创建接口对象,但我们如何在jdbc中创建语句对象或PrepareStatement?
创建的对象属于实现该接口的类。实际类别取决于驱动程序Java 我们知道我们不能创建接口对象,但我们如何在jdbc中创建语句对象或PrepareStatement?,java,Java,创建的对象属于实现该接口的类。实际类别取决于驱动程序 getConnection()和createStatement()都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库功能的类 DriverManager.getConnection()的一个(不是真的)实现如下所示: Connection con = DriverManager.getConnection(url+db,username,password); Statement st = con.createStatemen
getConnection()
和createStatement()
都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库功能的类
DriverManager.getConnection()
的一个(不是真的)实现如下所示:
Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();
实际上,实际的类是动态加载的,因此它不需要位于编译时类路径中。加载适当的类(如果找不到合适的类,则抛出错误)并返回。从此以后,MySQLConnection
类将返回一个MySQLStatement
,以此类推
您可以这样编写代码:
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
类允许一些不在Connection
接口中的功能,则这是有保证的,但在大多数情况下,您只想处理java.sql.Connection
接口,而不关心实际使用的是哪个数据库。创建的对象属于实现该接口的类。实际类别取决于驱动程序
getConnection()
和createStatement()
都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库功能的类
DriverManager.getConnection()
的一个(不是真的)实现如下所示:
Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();
实际上,实际的类是动态加载的,因此它不需要位于编译时类路径中。加载适当的类(如果找不到合适的类,则抛出错误)并返回。从此以后,MySQLConnection
类将返回一个MySQLStatement
,以此类推
您可以这样编写代码:
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
类允许一些不在Connection
接口中的功能,则这是有保证的,但在大多数情况下,您只想处理java.sql.Connection
接口,而不关心实际使用的是哪个数据库。创建的对象属于实现该接口的类。实际类别取决于驱动程序
getConnection()
和createStatement()
都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库功能的类
DriverManager.getConnection()
的一个(不是真的)实现如下所示:
Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();
实际上,实际的类是动态加载的,因此它不需要位于编译时类路径中。加载适当的类(如果找不到合适的类,则抛出错误)并返回。从此以后,MySQLConnection
类将返回一个MySQLStatement
,以此类推
您可以这样编写代码:
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
类允许一些不在Connection
接口中的功能,则这是有保证的,但在大多数情况下,您只想处理java.sql.Connection
接口,而不关心实际使用的是哪个数据库。创建的对象属于实现该接口的类。实际类别取决于驱动程序
getConnection()
和createStatement()
都是工厂方法。您可以编写使用接口的代码,但实际的类是实现该特定数据库功能的类
DriverManager.getConnection()
的一个(不是真的)实现如下所示:
Connection con = DriverManager.getConnection(url+db,username,password);
Statement st = con.createStatement();
实际上,实际的类是动态加载的,因此它不需要位于编译时类路径中。加载适当的类(如果找不到合适的类,则抛出错误)并返回。从此以后,MySQLConnection
类将返回一个MySQLStatement
,以此类推
您可以这样编写代码:
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
类允许一些不在Connection
接口中的功能,但在大多数情况下,您只想处理java.sql.Connection
接口,而不关心实际使用的是哪个数据库,那么这是有保证的。显示一个简单的示例。(并得到+1)举例来说,这是怎么回事?它与annonymous innerclass有关吗?一点也不。它与动态类加载有关。显示一个简单的示例。(并得到+1)举例来说,这是怎么回事?它与annonymous innerclass有关吗?一点也不。它与动态类加载有关。显示一个简单的示例。(并得到+1)举例来说,这是怎么回事?它与annonymous innerclass有关吗?一点也不。它与动态类加载有关。显示一个简单的示例。(并得到+1)举例来说,这是怎么回事?它与annonymous innerclass有关吗?一点也不。它与动态类加载有关。