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));
}
System.out.println("con class is "+ con.getClass());
System.out.println("comm class is "+ comm.getClass());
System.out.println("res class is "+ res.getClass());
}
}
输出:
con class is class oracle.jdbc.driver.T4CConnection
comm class is class oracle.jdbc.driver.T4CStatement
res class is class oracle.jdbc.driver.OracleResultSetImpl
T4CConnection实现接口Connection T4CStatement实现接口Statement OracleResultSetImpl实现了接口ResultSet
如果连接,语句和结果集是接口,我怎么能调用它们?我读here我永远无法实例化一个界面,但请看这个下面的程序......
答案 0 :(得分:2)
接口本身未实例化。相反,实现这些接口的类是。
示例代码:
import java.util.ArrayList;
import java.util.List;
public class Interfaces {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
System.out.println("list class is " + list.getClass());
}
}
输出:
list类是java.util.ArrayList类
请注意,list
的课程为ArrayList
,而非List
。这表明接口没有像已经声明的那样实例化。
答案 1 :(得分:2)
从方法getConnection()
,createStatement()
等返回的对象是接口的实例。这意味着在接口中实现方法,并在使用适当的类型和instanceof
时返回true。
所有接口都是100%抽象的,这意味着这些方法中没有代码,只是方法签名。您的类或其超类必须实现接口中的所有方法。这是Java的多重继承解决方案,以免混淆调用哪个方法实现。它允许一个对象同时表现为多种类型,但只允许一个直接超类。