java培训课程之使用QueryRunner类实现查询

使用QueryRunner类实现查询

  • public Object query(Connection conn, String sql, ResultSetHandler rsh,Object… params) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
  • public Object query(String sql, ResultSetHandler rsh, Object… params) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
  • public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
  • public Object query( String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。

ResultSetHandler接口

该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。

ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet  rs)

该方法的返回值将作为QueryRunner类的query()方法的返回值。

         @Test

         public void testResultSetHandler() {

                  // 1.创建QueryRunner的实例

                  QueryRunner qr = new QueryRunner();

 

                  Connection conn = null;

 

                  try {

                          // 2.获取连接

                          conn = JDBCTools.getConnection();

 

                          class MyResultSetHandler implements ResultSetHandler{

                                   @Override

                                   public Object handle(ResultSet rs) throws SQLException {

                                            Student stu = new Student();

                                            if (rs.next()) {

                                                     stu.setId(rs.getInt(1));

                                                     stu.setSname(rs.getString(2));

                                                     stu.setSex(rs.getString(3));

                                                     stu.setMajor(rs.getString(4));

                                                     stu.setClasses(rs.getString(5));

                                            }

                                            return stu;

                                   }

                          }

 

                          String sql = “select sno,sname,sex,major,classes from t_stu where sno =?”;

                          // 3、使用query方法

                          // QueryRunner 的 query 方法的返回值取决于其 ResultSetHandler 参数的handle 方法的返回值

                          Object obj = qr.query(conn, sql, new MyResultSetHandler(),1);

 

                          System.out.println(obj);

                  } catch (SQLException e) {

                          e.printStackTrace();

                  } finally {

                          JDBCTools.free(null, null, conn);

                  }

         }

  • ArrayHandler:把结果集中的第一行数据转成对象数组。
  • ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  • ColumnListHandler:将结果集中某一列的数据存放到List中。
  • KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  • MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

BeanHandler实现类

         /*

          * BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class参数对应的对象.

          * 当JavaBean的属性名与字段名不一致时,可以通过指定别名告知属性名

          */

         public static void main(String[] args) throws SQLException {

                  //1、连接池

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  //2、直接使用QueryRunner

                  QueryRunner qr = new QueryRunner(ds);

                  String sql = “select pid as id,pname,price,description from t_goods where pid =?”;

                  Goods goods = qr.query(sql, new BeanHandler<Goods>(Goods.class), 1);

                  System.out.println(goods);

         }

BeanListHandler实现类

         /*

          * BeanListHandler: 把结果集转为一个 List, 该 List 不为 null, 但可能为空集合(size() 方法返回 0) 若

          * SQL 语句的确能够查询到记录, List 中存放创建 BeanListHandler 传入的 Class对象对应的对象.

          */

         public static void main(String[] args) throws SQLException {

                  //1、连接池

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  //2、直接使用QueryRunner

                  QueryRunner qr = new QueryRunner(ds);

                  String sql = “select pid as id,pname,price,description from t_goods”;

                  List<Goods> query = qr.query(sql, new BeanListHandler<Goods>(Goods.class));

                  for (Goods goods : query) {

                          System.out.println(goods);

                  }

         }

MapHandler实现类

         public static void main(String[] args) throws SQLException {

                  // 1、连接池

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  // 2、直接使用QueryRunner

                  QueryRunner qr = new QueryRunner(ds);

 

                  String sql = “select did,count(*) from employee where did = 1”;

                  Map<String, Object> map = qr.query(sql, new MapHandler());

                  Set<Entry<String, Object>> entrySet = map.entrySet();

                  for (Entry<String, Object> entry : entrySet) {

                          // System.out.println(entry.getKey() +”–>” + entry.getValue());

                          if (“did”.equals(entry.getKey())) {

                                   System.out.println(“部门编号:” + entry.getValue());

                          } else {

                                   System.out.println(“人数:” + entry.getValue());

                          }

                  }

         }

MapListHandler实现类

         public static void main(String[] args) throws SQLException {

                  //1、连接池

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  //2、直接使用QueryRunner

                  QueryRunner qr = new QueryRunner(ds);

 

                  String sql = “select did,count(*) from employee group by did”;

                  /*

                   * did count(*)

                   *  1   7

                   *  2   3

                   *  3   1

                   * 

                   *  List:

                           *  map:

                           *    key(did) value(1)

                           *    key(count(*) value(7)

                           * 第二行

                           *  map:

                           *    key(did) value(2)

                           *    key(count(*) value(3)

                           * 第三行

                           *    map:

                           *    key(did) value(3)

                           *    key(count(*) value(1)

                   *

                   */

                  List<Map<String, Object>> query = qr.query(sql, new MapListHandler());

                  for (Map<String, Object> map : query) {

                          Set<Entry<String, Object>> entrySet = map.entrySet();

                          for (Entry<String, Object> entry : entrySet) {

                                   //System.out.println(entry.getKey() +”–>” + entry.getValue());

                                   if(“did”.equals(entry.getKey())){

                                            System.out.println(“部门编号:” + entry.getValue());

                                   }else{

                                            System.out.println(“人数:” + entry.getValue());

                                   }

 

                          }

                  }

         }

ScalarHandler实现类

         /*

          * ScalarHandler: 把结果集转为一个数值(可以是任意基本数据类型和字符串, Date 等)返回

          * ScalarHandler()只取第一行第一列

          * ScalarHandler(int columnIndex):取第一行的第columnIndex列

          * ScalarHandler(String columnName):取第一行的列名为columnName列的值

          */

         @Test

         public static void main(String[] args) throws SQLException {

                  //1、连接池

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  //2、直接使用QueryRunner

                  QueryRunner qr = new QueryRunner(ds);

 

//               String sql = “select count(*) from t_goods”;

                  String sql = “select max(price) from t_goods”;

                  Object query = qr.query(sql, new ScalarHandler());

                  System.out.println(query);

         }

 


上一篇:
下一篇: