001-SE-0019-DBCP及DBUtils

DBUtils
	* Apache commons的一个组件
	* 只能操作表中的数据,不能操作表结构
	* 常用功能
		* QueryRunner中提供对sql语句操作的API.
		* ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
		* DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
	* 使用步骤
		* 导入Jar包:commons-dbutils-1.6.jar
		* 通过DriverManger注册驱动
		* 通过DriverManager获取连接对象Connection
		* 通过DBUtils的QueryRunner使用对应的Connection完成SQL操作
		* 针对执行查询语句时,通过不同的ResultSetHandler子类可以在查询数据后,直接将得到的数据封装为想要的数据组织方式
QueryRunner类
	* 用于执行sql语句的工具类
	* 构造方法
		* QueryRunner qr = new QueryRunner();
			* 空参构造,调用方法时需要传入连接对象
		* QueryRunner qr = new QueryRunner(pool);
			* 带参构造,参数pool是连接池,调用方法是不需要传入连接对象
	* 常用方法
		* <?> query(conn,sql,alh)
			* conn:连接对象
			* sql:sql语句
			* alh:ResultSetHandler接口的子类
			* 返回值类型由ResultSetHandler的子类对象决定
		* int update(String sql, Object... params)
			* sql:要执行的sql语句
			* params:可变参数列表
			* 返回值int表示影响的行数
ResultSetHandler子类
	* ArrayHandler
		* 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
	* ArrayListHandler
		* 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
	* BeanHandler
		* 将结果集中第一条记录封装到一个指定的javaBean中。
	* BeanListHandler
		* 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
	* ColumnListHandler
		* 将结果集中指定的列的字段值,封装到一个List集合中
	* KeyedHandler
		* 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
	* MapHandler
		* 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
	* MapListHandler
		* 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
	* ScalarHandler
		* 它是用于单数据。例如select count(*) from 表操作。
ResultSetHandler子类用法举例:
	* ArrayHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT * FROM tb_poi";
			// 创建Handanler对象
			ArrayHandler handler = new ArrayHandler();
			// ArrayHandler,将第一行组织为一个数组
			Object[] firstRow = qr.query(conn, sql,handler);
			// 遍历
			for (Object object : firstRow) {
				System.out.print(object + "  ");
			}
		}
	* ArrayListHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT * FROM tb_poi";
			// 创建Handanler对象
			ArrayListHandler handler = new ArrayListHandler();
			// ArrayListHandler,将所有数据组织为一个集合,每一行组织为一个数组
			List<Object[]> list = qr.query(conn, sql, handler);
			// 遍历所有数据的集合,依次获取到每一行(每一行都是一个数组)
			for (Object[] rowdata : list) {
				// 遍历每行,依次获取每行的每列数据
				for (int i = 0; i < rowdata.length; i++) {
					System.out.print(rowdata[i] + "   ");
				}
				// 每次遍历后换行
				System.out.println();
			}
		}
	* BeanHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT id, username,password FROM tb_user";
			// 创建Handanler对象
			BeanHandler<User> handler = new BeanHandler<User>(User.class);
			// BeanHandler将第一行组织为一个指定javabean对象
			User user = qr.query(conn, sql, handler);
		}
	* BeanListHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT id, username,password FROM tb_user";
			// 创建Handanler对象
			BeanListHandler<User> handler = new BeanListHandler<User>(User.class);
			// BeanListHandler将所有数据组织为多个指定javabean对象,每一行组织为一个javabean对象
			List<User> users = qr.query(conn, sql, handler);
			// 遍历
			for (User thisUser : users) {
				System.out.println(thisUser);
			}
		}
	* ColumnListHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT * FROM tb_user";
			// 创建Handanler对象
			ColumnListHandler<String> handler = new ColumnListHandler<String>("password");
			// ColumnListHandler将数据集中指定的列封装成一个集合,本例中封装的是password列
			List<String> list = qr.query(conn, sql, handler);
			System.out.println(list);
		}
	* keyedHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT * FROM tb_user";
			// keyedHandler将每一行封装为一个map,在将该map作为value封装到另一个map中,Key为指定的列,如下指定第一列为key
			KeyedHandler<Integer> handler = new KeyedHandler<Integer>(1);
			Map<Integer, Map<String, Object>> query = qr.query(conn, sql, handler);
			System.out.println(query);
		}
	* MapHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT id, username,password FROM tb_user";
			// 创建Handanler对象
			MapHandler handler = new MapHandler();
			// MapHandler将第一行数据组织为一个指定Map集合对象
			Map<String, Object> rowMap = qr.query(conn, sql, handler);
			//遍历map
			Set<String> keySet = rowMap.keySet();
			for (String key : keySet) {
				System.out.println("key:" + key + "    value:" + rowMap.get(key));
			}
		}
	* MapListHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT id, username,password FROM tb_user";
			// 创建Handanler对象
			MapListHandler handler = new MapListHandler();
			// 执行sql语句,组织返回结果,本次使用的是MapHandler,功能为将第一行组织为一个指定Map集合对象
			List<Map<String, Object>> data = qr.query(conn, sql, handler);
			for (Map<String, Object> row : data) {
				Set<String> keySets = row.keySet();
				for (String key : keySets) {
					System.out.println("key:" + key + "    value:" + row.get(key));
				}
			}
		}
	* ScalarHandler
		@Test
		public void demo() throws Exception {
			// 通过工具类获取连接对象
			Connection conn = JDBCUtil.getConn();
			// 使用DBUtils的QueryRunner完成数据读取
			QueryRunner qr = new QueryRunner();
			// 准备sql语句
			String sql = "SELECT COUNT(id) FROM tb_user";
			// 创建Handler对象
			ScalarHandler<Long> handler = new ScalarHandler<Long>();
			Long query = qr.query(conn, sql, handler);
			System.out.println(query);
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值