-1
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

如果连接、语句和结果集是接口,我如何调用它们?我在这里读到我永远无法实例化接口,但请看这里的以下程序......

4

2 回答 2

2

getConnection()从方法、等返回的对象是createStatement()接口的实例。这意味着实现接口中的方法,并在使用适当的类型时返回 true 和instanceof.

所有接口都是 100% 抽象的,这意味着方法中没有代码,只是方法签名。您的类或其超类必须实现接口中的所有方法。这是Java对多重继承的解决方案,以免对调用哪个方法实现造成混淆。它允许一个对象同时充当多种类型,但只允许 1 个直接超类。

于 2013-06-16T19:33:06.043 回答
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());
}

}

输出:

列表类是类 java.util.ArrayList

请注意,类listArrayList,不是List。这表明接口没有像已经声明的那样实例化。

于 2013-06-16T19:25:37.587 回答