/*
* 创建DBCP连接池工具类
* 使用读取配置文件的方式
* DBCP中有一个工厂类BasicDataSourceFactory
* 工厂类中有一个静态方法
* static DataSource createDataSource(Properties prop)
* 此方法返回的就是DataSource接口的实现类对象BasicDataSource
*
* 创建Propertis集合+IO技术读取配置文件
* 把配置文件传入BasicDataSourceFactory静态方法createDataSource中
*/
public class DBCPUtilsReadConfig {
//创建DataSource变量
private static DataSource dataSource;
static{
try {
//创建Propertis集合+IO技术读取配置文件
//使用类加载器,扫描包下的文件
InputStream is = DBCPUtilsReadConfig.class.getClassLoader()
.getResourceAsStream("dbcpconfig.properties");
//创建Propertis集合
Properties prop = new Properties();
prop.load(is);
//把配置文件传入BasicDataSourceFactory静态方法createDataSource中
dataSource = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
throw new RuntimeException("读取配置文件失败");
}
}
//创建获取数据库连接对象的方法
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("获取数据库连接对象失败");
}
}
//定义一个释放资源的方法
public static void close(ResultSet rs,Statement stat,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat !=null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
* 使用DBUtils工具类对数据库表进行增删改查
* DBUtils工具类作用:简化JDBC的开发(6步)
*
* DBUtils有3个核心类
* 1.QueryRunner:使用QueryRunner中的方法对数据库进行增删改查
* 2.DbUtils:提供了大量的释放资源的方法
* 3.ResultSetHandler接口:提供了处理查询结果集的方法
*
* QueryRunner类
* 构造方法:
* QueryRunner() 空参数构造方法
* 调用更新和查询方法的时候,需要传入Connection对象
* QueryRunner(DataSource ds) 带DataSource数据库连接池的构造方法
* 调用更新和查询方法的时候QueryRunner会自动从DataSource实现类对象中获取数据库连接对象,使用完毕会自动归还
* 成员方法:
* 执行执行增删改的成员方法
* int update(Connection conn, String sql, Object... params)用来执行增删改的SQL
* int update(String sql, Object... params) 用来执行增删改的SQL
* 参数:
* Connection conn:数据库连接对象
* String sql:拼接的sql语句,可以使用?占位符
* Object... params:?占位符的实际参数,可以使用Object[]
* 返回值:
* int:执行的有效行数
* 执行执行查询的成员方法
* <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
* <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
* 参数:
* Connection conn:数据库连接对象
* String sql:拼接的sql语句,可以使用?占位符
* Object... params:?占位符的实际参数,可以使用Object[]
* ResultSetHandler<T> rsh:用来存储查询之后的结果集,可以传入ResultSetHandler9种实现类对象
* 返回值:
* <T> T:传入的ResultSetHandler实现类不同,返回的结果集也不同,使用泛型,传入什么结果集,就返回对应的类型