我最近发现以下程序中使用的Statement,Connection和ResultSet是接口。这个程序完全正常,但谁实现了这些接口?
package jdbc;
import java.sql.*;
public class Mango {
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@66.66.66.128:1521:xe","SYSTEM","matrix");
Statement comm = con.createStatement();
comm.executeQuery("insert into a values('a',1)");
ResultSet res = comm.executeQuery("SELECT * FROM A");
comm.executeQuery("insert into a values('a',1)");
while(res.next()) {
System.out.println(res.getString(1) + " " + res.getInt(2));
}
}
}
答案 0 :(得分:6)
接口Statement,Connection和ResultSet最终由第三方JDBC驱动程序提供程序实现。
假设您使用的是MySQL驱动程序,这就是实现层次结构的方式,
内部实施层次结构:
com.mysql.jdbc.StatementImpl(Class) -->implements--> com.mysql.jdbc.Statement(interface) -->extends--> java.sql.Statement(interface)
内部实施层次结构:
com.mysql.jdbc.JDBC4Connection(Class) -->extends--> com.mysql.jdbc.ConnectionImp(Class) -->extends--> com.mysql.jdbc.ConnectionPropertiesImpl(Class) -->implements--> com.mysql.jdbc.MySQLConnection(Interface) -->extends--> com.mysql.jdbc.Connection(Interface) -->extends--> java.sql.Connection(Interface)
内部实施层次结构:
com.mysql.jdbc.ResultSetImpl(Class) -->implements--> com.mysql.jdbc.ResultSetInternalMethods(Interface) -->extends--> java.sql.ResultSet(Interface)
答案 1 :(得分:2)
JDBC API是通过JDBC驱动程序实现的,这些驱动程序由各种数据库软件供应商提供。
JDBC驱动程序是一组实现JDBC接口以处理JDBC调用并将结果集返回给Java应用程序的类
答案 2 :(得分:1)
JDBC驱动程序提供程序提供了可以执行此操作的实现。在这种情况下,Oracle。
System.out.println("con class is "+ con.getClass());
System.out.println("comm class is "+ comm.getClass());
System.out.println("res class is "+ res.getClass());
BTW不要忘记在完成资源后关闭资源,或者你可以获得记忆。
答案 3 :(得分:1)
这些类型的接口的实现是特定于供应商的。 例如,如果您使用的是Mysql并且已将Mysql Jar放在类路径中,那么实现类如下:
1. java.sql.Statement [Interface] -> com.mysql.jdbc.StatementImpl [Class]
2. java.sql.Connection [Interface] -> com.mysql.jdbc.MySQLConnection [Interface] -> com.mysql.jdbc.ConnectionImpl [Class]
3. java.sql.ResultSet [Interface] -> com.mysql.jdbc.ResultSetImpl [Class]
答案 4 :(得分:0)
数据库供应商提供第三方驱动程序,JDBC-ODBC驱动程序通过该驱动程序与数据库进行通信。 这些第三方驱动程序具有某些实现接口的类,并根据需要编写它们的主体。所以当你从mysql数据库移动到oracle数据库时,驱动程序的主体就会改变。