1.上一节我们用到JDBC并设置了连接数据库必要的四个变量:dreiver url user password
在实际应用中,JDBC可设置的还有很多属性如最大连接数量,连接等待时间等,我们可以自己写一个JDBC的工具类实现对JDBC属性的设置(重构JDBCUtils类)
package cn.itheima.gjp.tools;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class JDBCUtils {//Java中的静态常量命名规范要大写
public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/gjp";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
private static final int MAX_IDLE = 3;
private static final long MAX_WAIT = 5000;
private static final int MAX_ACTIVE = 5;
private static final int INITIAL_SIZE = 10;
private static BasicDataSource dataSource = new BasicDataSource();
//创建BasicDataSource对象
static {//静态代码块
//有些代码必须在项目启动的时候就执行,这种代码是主动执行的
//(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化)
dataSource.setDriverClassName(DRIVER_CLASS_NAME);
dataSource.setUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaxActive(MAX_IDLE);
dataSource.setMaxWait(MAX_WAIT);
dataSource.setMaxActive(MAX_ACTIVE);
dataSource.setInitialSize(INITIAL_SIZE);
}
public static DataSource getDataSource() {//注意,此处方法类型是接口,返回的是实现类
return dataSource;//调用该方法接收时要用接口接收
}
}
注意,此处方法类型是接口,返回的是实现类,调用该方法接收时要用接口接收
//使用JDBCUtils代码
DataSource source2 = JDBCUtils.getDataSource();//创建接口对象,实际是接口的实现类对象
QueryRunner qr2 = new QueryRunner(source2);
try {// ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
List<Object[]> list = qr.query("SELECT * FROM STUDENT", new ArrayListHandler());
for (Object[] objects : list) {
for (Object object : objects) {
System.out.print(object);
}
System.out.println();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
注意:接口不能实例化 但可以创建该接口的实例化对象
接口可以创建引用,也就是说接口可以用它这个类型去声明一个变量的引用,然后用一个接口实现类new一个变量,赋值给这个引用,然后用这个引用去调用接口的实现类的方法既可以实现多态。
——某论坛