接口: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();这两个是什么意思,我一直看不明白,能否详细解释一下啊,还有为什么要这样声明对象的,
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();这两个是什么意思,我一直看不明白,能否详细解释一下啊,还有为什么要这样声明对象的,
解决方案 »
- java 非阻塞io 即nio无限循环问题,困扰很久了,csdn版主、 高手请进,开了一个贴,三天没有人回答,希望有高手帮助,拜谢了
- 问一个,大家都会的问题(我有点迷糊),关于main的问题
- 这两个程序是什么意思?
- java中接口和方法的区别
- 一个font有没有宽和高的概念?
- 请问java中有没有算符重载功能?
- 关于抽象类的例子,总觉得不妥,希望高手指点,谢谢~~~~
- 请教:Robocode里面的动态生成类是怎么做的?
- 新手提问
- 我做的第一个java程序(只有一句话),帮忙
- java中switch语句可以这样写吗??求解释
- FileReader输入流和InputStreamReader输入流的区别
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中的一个连接对象。
因为 SimpleDBSource 实现 DBSource接口 ,所以 SimpleDBSource的实例可以赋值给 DBSource接口的引用 ,dbSource.getConnection();--java虚拟机 会自动匹配具体是那个实现类的getConnection方法
应该写成SimpleDBSource dbSource = new SimpleDBSource();
因为接口不是实例类。
很详细,谢谢,还有个问题,我也很疑惑 DBSource dbSource = new SimpleDBSource();为什么要设计成父类的引用指向子类的对象,而不是 SimpleDBSource dbSource = new SimpleDBSource();????