连接池的作用?
Java 为了解决 频繁创建数据库链接和释放数据库链接的这个问题创建了连接池
可以操作 JDBC 链接数据库 并且 执行SQL语句 处理返回的结果集
三个核心类:
/* 1.DbUtls
* 一些关闭资源的方法 (安静的关闭 不用异常处理)
*2.QueryRunner
*执行SLQ语句 并且返回你想要的结果集
*
*3.参数 ResultSetHandler
*这个参数 是个接口 (使用实现类 想要什么结果集 就传入什么,该接口的实现类)
*/
public class Demo01 {
public static void main(String[] args) throws SQLException{
//fun();
//更新
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
//使用占位符传入sql语句
String sql = "update sort set sname=?"+ ",sprice=?,sdesc=? where sid=5";
// 多参数参数 传入方式1
//利用数组
//方式2
//直接传递参数 注意要和 占位符问号的顺序 对应
Object [] params = {"咖啡",10000,"java中的咖啡"};
int row = qr.update(connection, sql,"咖啡1",12000,"java中的咖啡1" );
if (row>0) {
System.out.println("修改成功");
}
DbUtils.closeQuietly(connection);
}
private static void fun() throws SQLException {
// 插入一条数据使用QueryRunner
QueryRunner qr = new QueryRunner();
//获取链接
Connection connection = JDBCUtil.getConnection();
//插入数据数据库语句
String sql = "insert into sort values(null,'显示器',5,'这是一台播放家教的显示器')";
//插入数据方法
int row = qr.update(connection, sql);
if (row>0) {
System.out.println("插入成功");
}
//安静的关闭资源
DbUtils.closeQuietly(connection);
}
}
查询操作,8个结果集
/* 1.结果集第一种处理方法 ArrayHandler 是 ResultSetHandler 子集
* ArrayHandler
* 把查询出来的数据第一行 放进对象数据中 并返回
*/
public class Demo02 {
@Test
public void select1() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select*from sort";
//调用查询 方法
//传入什么容器 该类就把数据放到什么容器中 给你返回.
Object[] objects = qr.query(connection, sql, new ArrayHandler());
for (Object object : objects) {
System.out.println(object);
}
DbUtils.closeQuietly(connection);
}
/* 2. 结果集的第二种处理方法 ArrayListHandler 是ResultSetHandler 子集
* 将结果集中的每一行 都封装到 对象 数组中 出现很多对象数组 对象数组存储到List 集合
*
* 查询每一条记录 放到List集合中
* 每一条记录 是一个对象
*/
@Test
public void select2() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select *from sort";
List<Object[]> query = qr.query(connection, sql, new ArrayListHandler());
for (Object[] objects : query) {
for (Object object : objects) {
System.out.println(object);
}
}
DbUtils.closeQuietly(connection);
}
/*3. 结果集的第三种处理方法 BeanHangler
* 把结果集的第一行封装成 一个 javaBean 对象
*
* JavaBean 对象的规则
* 1.成员变量私有化
* 2.提供空参的构造方法
* 3.提供set/get方法
* 符合以上规则的实体类 创建出来的对象
* 就是一个JavaBean 对象
*/
@Test
public void select3() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select*from sort";
//要使用哪个 javabean 实体类传进去
//类型.class
Srot srot = qr.query(connection, sql, new BeanHandler<>(Srot.class));
if (srot==null) {
System.out.println("没有该条数据");
}
System.out.println(srot);
DbUtils.closeQuietly(connection);
}
/* 4. 结果集的第四种处理方法 BeanListHangler
* 重要 常用 !!!!
*
*
*/
@Test
public void select4() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select*from sort";
List<Srot> list = qr.query(connection, sql, new BeanListHandler<>(Srot.class));
for (Srot srot : list) {
System.out.println(srot);
}
DbUtils.close(connection);
}
/*5. 结果集的第五种处理方法 ColumnListHandler
*
* 结果集, 指定列的数据 ,存储到List集合
*
* 返回指定列的数据 放在list 中返回
*/
@Test
public void select5() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select*from sort";
List<Object> list = qr.query(connection, sql, new ColumnListHandler<>("sname"));
for (Object object : list) {
System.out.println(object);
}
DbUtils.close(connection);
}
/*6. ScalarHandler
* 结果集第六种处理方法 , ScalarHandler
* 对于查询后, 只有一个结果
* 查询 结果是一个的时候 使用的
*/
@Test
public void select6() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select count(*) from sort";
Object query = qr.query(connection, sql, new ScalarHandler<>());
System.out.println(query);
DbUtils.closeQuietly(connection);
}
/*7. MapHandler
* 结果集第七种处理方法 MapHandler
* 将结果集第一行数据 封装到Map集合中
*
*/
@Test
public void select7() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select *from sort";
Map<String, Object> map = qr.query(connection, sql,new MapHandler());
for (String key : map.keySet()) {
System.out.println(key +" "+map.get(key));
}
DbUtils.closeQuietly(connection);
}
/*8.MapListHandler
* 将结果每一行数据
*
*/
@Test
public void select8() throws SQLException {
QueryRunner qr = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select*from sort";
List<Map<String, Object>> list = qr.query(connection, sql, new MapListHandler());
for (Map<String, Object> map : list) {
for (String key : map.keySet()) {
System.out.println(key + " "+ map.get(key));
}
}
DbUtils.closeQuietly(connection);
}
}