接口:package db;import java.sql.Connection;
import java.sql.SQLException;public interface DBSource {
public Connection getConnection() throws SQLException;
public void closeConnection(Connection conn) throws SQLException;
}接口实现类:package db;import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;public class SimpleDBSource implements DBSource {
private Properties props;
private String url;
private String user;
private String password;

public SimpleDBSource() throws IOException,ClassNotFoundException{
this("jdbc.properties");
}
public SimpleDBSource(String configFile) throws IOException,ClassNotFoundException{
props = new Properties();
props.load(new FileInputStream(configFile));
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");

Class.forName(props.getProperty("driver"));
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,user,password);
}
public void closeConnection(Connection conn) throws SQLException{
conn.close();
}
}
测试类:package db;import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;public class ConnectionDemo {
public static void main(String args[]){
try{ DBSource dbSource = new SimpleDBSource();
Connection conn = dbSource.getConnection();
if(!conn.isClosed()){
System.out.println("数据库已连接上");
}
dbSource.closeConnection(conn);
if(conn.isClosed()){
System.out.println("");
}
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
}这是书上的一个例子,有点不太明白,各位大哥,想问一下上面这个测试类中的DBSource dbSource = new SimpleDBSource();Connection conn = dbSource.getConnection();这两个是什么意思,我一直看不明白,能否详细解释一下啊,还有为什么要这样声明对象的,

解决方案 »

  1.   

    1:SimpleDBSource是DBSource 的实现类 DBSource 是个接口,所以SimpleDBSource实现了DBSource 类中所有的方法。
    2:DBSource dbSource = new SimpleDBSource(); 用接口方式去接收一个实现类,也就是给了DBSource 类一个dbSource别名,通过这个别名可以直接调用其中类的任何一个方法。
    也可以写成DBSource dbSource = new DBSource (); 
    3:Connection conn = dbSource.getConnection();是2中说的调用其中的一个方法,
    public Connection getConnection() throws SQLException{..}是Connection 类型所以得用Connection 去接受dbSource.getConnection();返回的类型。
    Connection 是JDBC中的一个连接对象。
      

  2.   

    上面这个测试类中的DBSource dbSource = new SimpleDBSource();Connection conn = dbSource.getConnection();
    因为 SimpleDBSource 实现 DBSource接口 ,所以 SimpleDBSource的实例可以赋值给 DBSource接口的引用 ,dbSource.getConnection();--java虚拟机 会自动匹配具体是那个实现类的getConnection方法
      

  3.   

    哦第2步写错了,DBSource dbSource = new DBSource ();  
    应该写成SimpleDBSource dbSource = new SimpleDBSource();
    因为接口不是实例类。  
      

  4.   

       我也很疑惑 DBSource dbSource = new SimpleDBSource();为什么要设计成父类的引用指向子类的对象,而不是 SimpleDBSource dbSource = new SimpleDBSource();????
      

  5.   


    很详细,谢谢,还有个问题,我也很疑惑 DBSource dbSource = new SimpleDBSource();为什么要设计成父类的引用指向子类的对象,而不是 SimpleDBSource dbSource = new SimpleDBSource();????