DBUtils
第三方类库 是数据库的工具类
简化数据库操作的代码和JDBC连接的代码
操作数据库的三个核心类
1.DBUtils 关闭数据库
closeQuietly 不会抛出异常
不会抛出SQLException异常
2.QueryRunner 负责查询的对象
update(Connection conn, String sql, Object... params)
传入sql可以使用占位符(?)来代替
通过参数3 把要替换的占位符的值传进去
3.ResultSetHandle 查询结果的返回值
是一个接口 需要使用它的实现类(8个) query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
// 创建QueryRunner对象
QueryRunner queryRunner = new QueryRunner();
String sql = "insert into goods values (null,?,?,?)";
// 替换占位符
Object[] obj = {"糖",4,"好吃不贵"};
// 调用执行sql语句的方法
int row = queryRunner.update(connection, sql,obj);
// 处理返回的结果
System.out.println(row);
// 关闭资源
DbUtils.closeQuietly(connection);
ResultSetHandle的8个实现类
ArrayHandler
该方法使用ArrayHandle()类查询时 会返回数据库中的一条记录 并且会把该条记录的字段放入一个Object数组中
集合中的每一个Object[]就是数据库中的一条记录
List<Object[]> query = queryRunner.query(connection, sql, new ArrayListHandler());
for (Object[] objects : query) {
System.out.println(Arrays.toString(objects));
}
BeanHandler
// 可以将查询结果 帮你放进实体对象中
// 参数 是放入的对象的实体类的 .class 文件类型
Goods g = queryRunner.query(connection, sql, new BeanHandler<Goods>(Goods.class));
System.out.println(g);
BeanListHandler
ArrayList<Goods> list = (ArrayList<Goods>) queryRunner.query(connection, sql, new BeanListHandler<>(Goods.class));
for (Goods goods : list) {
System.out.println(goods);
}
ColumnListHandler
// ColumnListHandler 把数据库中的一列数据 放入集合中给你返回
// 默认第一列 可以传入列名
List<Object> list = queryRunner.query(connection, sql, new ColumnListHandler<>("sname"));
for (Object object : list) {
System.out.println(object);
}
ScalarHandler
// 测试ScalarHandler
// 该方法放回的类型是Long
Long query = queryRunner.query(connection, sql, new ScalarHandler<Long>(1));
System.out.println(query);
MapHandler
Map<String, Object> query = queryRunner.query(connection, sql, new MapHandler());
Set<String> keySet = query.keySet();
for (String string : keySet) {
System.out.println(string + query.get(string));
}
MapListHandler
ArrayList<Map<String, Object>> query = (ArrayList<Map<String, Object>>) queryRunner.query(connection, sql, new MapListHandler());
for (Map<String, Object> map : query) {
for (String key : map.keySet()) {
System.out.print(key + " " + map.get(key) + ",");
}
System.out.println();
}
DataSource(数据源 数据库连接池)
数据库连接池中,保存了许多的连接(Connection)。在操作数据库时,最耗费资源的是创建连接和销毁连接。当用户需要做查询数据库的操作时,会从连接池中取出来一个使用。使用完毕后不会销毁这个连接,而是从新放入连接池中备用。
java为数据库连接池,准备了一套规范(接口)。这套规范也是由数据库厂商实现,并且该类也提供了获取连接的方法。常用的数据库连接池:DBCP、C3P0。
获取DataSource的工具类
public class DataSourceUtil {
// 声明一个BasicDataSource
private static BasicDataSource dataSource = new BasicDataSource();
private DataSourceUtil() {
}
// 设置dataSource
static {
// 基础设置
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc01");
dataSource.setUsername("root");
dataSource.setPassword("123456");
// 扩展设置(初始化多少个连接)
// 初始化连接数量
dataSource.setInitialSize(10);
// 设置最大连接数量
dataSource.setMaxActive(8);
// 设置最大空闲连接数量
dataSource.setMaxIdle(5);
// 设置最小空闲连接数量
dataSource.setMinIdle(1);
}
// 获取数据源的方法
public static DataSource getDataSource() {
return dataSource;
}
}