QueryRunner

关于QueryRunner的查询功能

步骤
1.QueryRunner(DataSource)
2.query(String sql,ResultSetHandler rsh,Object…params);

** ResultSetHandler:结果集处理类(接口)
|BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中
|BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,
| 将这些javaBean在封装到List集合中。
|ScalarHandler:它是用于单个数据,例如:select count(*)from

/***

  • 此代码演示了ResultSetHandler的九种结果集实现类
  • 重点常用的是
  • BeanHandler()//将结果集中第一条记录封装到一个指定的javaBean中
  • BeanLiatHandler()//将结果集中每一条记录封装到指定的javaBean中,
  • 将这些javaBean在封装到List集合中。
  • ScalarHandle()//查询某个数据的个数
  • */
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    public class QueryRunnerDemo {
    public static void main(String[] args) throws SQLException {
    //ArrayHandlerTest();//将第一条数据保存到Object数组中并返回
    //ArrayListHandlerTest();//返回的是集合封装好的一个一个的数组
    //BeanHandlerTest();//将结果集中第一条记录封装到一个指定的javaBean中
    //BeanLiatHandlerTest();//将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。
    //ColumnListHandlerTest();//将某一列封装成集合并返回
    //MapHandlerTest();//将结果封装成map集合并返回
    //MapListHandlerTest();
    //ScalarHandleTest();
    //KeyedHandler();

    }

    public static void ArrayHandlerTest() throws SQLException {
    //将第一条数据保存到Object数组中并返回
    //如果SQL语句中没有规定查询第几个数据,就会默认保存了第一条数据(该例中就是cid=1的数据)
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category where cid = ?";
    Object[] obj = {3};
    Object[] os = qr.query(sql,new ArrayHandler(),obj);
    for(Object objects:os){
    System.out.println(objects);
    }
    }
    public static void ArrayListHandlerTest() throws SQLException {
    //当SQL语句要查询多个或所有的数据
    //ArrayListHandler返回值是List<Object[]>类型,返回的是集合封装好的一个一个的数组
    //所以输出的时候也要规定好数组的下标
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    Object[] obj = {3};
    List<Object[]> list = qr.query(sql,new ArrayListHandler());
    for(Object[] objects:list){
    System.out.println(objects[0]+" "+objects[1]);
    }
    }

    public static void BeanHandlerTest() throws SQLException {
    //BeanHandler类将结果集中第一条记录封装到一个指定的javaBean中
    //用来查询一个值,并且将该值封装成一个对象并返回
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    Category c = qr.query(sql,new BeanHandler<Category>(Category.class));//BeanHandler类的使用
    System.out.println(c);//此处就只有第一条数据
    }

    public static void BeanLiatHandlerTest() throws SQLException {
    //BeanListHandler类将所有结果封装到指定的javaBean中
    //并将这些javabean封装成集合并返回
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    List<Category> c = qr.query(sql,new BeanListHandler<Category>(Category.class));
    for(Category category : c){
    System.out.println(category);
    }
    }

    public static void ColumnListHandlerTest() throws SQLException {
    //ColumnListHandler类将指定的某一列的数据封装到集合中并返回
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    List list = qr.query(sql,new ColumnListHandler<>("cname"));
    System.out.println(list);
    }

    public static void MapHandlerTest() throws SQLException {
    //返回MAP集合
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    Map<String,Object> m = qr.query(sql,new MapHandler());
    System.out.println(m);
    }

    public static void MapListHandlerTest() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * from category";
    List<Map<String,Object>> m = qr.query(sql,new MapListHandler());
    System.out.println(m);
    }

    public static void ScalarHandleTest() throws SQLException {
    //查询某个数据的个数
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT count(*) from category";
    //此处的返回值是long,因为数据库的数据太多,这里默认是Long而不是Integer
    Long count = qr.query(sql,new ScalarHandler<Long>());
    System.out.println(count);
    }

    public static void KeyedHandler() throws SQLException {
    //查询的每一行数据存储到map集合中,将多个map集合再存储到map中
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "SELECT * FROM category";
    Map<Object, Map<String, Object>> map = qr.query(sql, new KeyedHandler<>());
    //遍历map(两层)
    for(Object obj : map.keySet()) {
    for(String key : map.get(obj).keySet()) {
    System.out.print(key+"\t"+map.get(obj).get(key)+"\t");
    }
    System.out.println();
    }
    }

    }