欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jdbc实现简单的分组聚合统计查询

程序员文章站 2022-05-03 19:18:13
...

oracle数据库中原有salary表数据如下:
jdbc实现简单的分组聚合统计查询

一、准备好本程序基础文件:DataSourceForPool(数据库连接池管理工具类)、Env(读取数据库属性配置文件)、DataSource.properties(数据库属性配置文件)。以下实现分组聚合统计查询:

二、数据库访问组件SalaryDao.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.yanchengdai.util.DataSourceForPool;

/**
 * Salary访问数据库组件
 * @author Administrator
 *
 */
public class SalaryDao {

	/**
	 * 分组聚合统计查询
	 * @return List 返回封装记录的Map集合
	 */
	public List<Map<String,Object>> querySalary(){
		List<Map<String,Object>> list = new ArrayList<>();
		/*使用连接池数据源获取连接*/
		Connection conn = DataSourceForPool.getConnection();
		String sql = "SELECT emp_id, COUNT(should), SUM(should), ROUND(AVG(should),2) "
				+ "FROM salary GROUP BY emp_id order by sum(should) desc";
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			/*处理结果集的每一行记录*/
			while(rs.next()) {
				/*每行记录封装为Map对象*/
				Map<String,Object> map = new HashMap<>();
				map.put("emp_id", rs.getObject(1));
				map.put("count", rs.getObject(2));
				map.put("sum", rs.getObject(3));
				map.put("avg", rs.getObject(4));
				list.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return list;
	}
}

三、普通测试类TestSalaryQuery.java

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import cn.yanchengdai.dao.SalaryDao;

/**
 * 测试SalaryDao类中的封装记录
 * @author Administrator
 *
 */
public class TestSalaryQuery {

	public static void main(String[] args) {
		
		List<Map<String,Object>> list = new ArrayList<>();
		list = new SalaryDao().querySalary();
		System.out.println("emp_id\tcount\tsum\tavg");
		for(Map<String,Object> m : list) {
			System.out.println(m.get("emp_id")+"\t"+m.get("count")+
					"\t"+m.get("sum")+"\t"+m.get("avg"));
		}
	}

}

执行结果:
jdbc实现简单的分组聚合统计查询