jdbc实现简单的分组聚合统计查询
程序员文章站
2022-05-03 19:18:13
...
oracle数据库中原有salary表数据如下:
一、准备好本程序基础文件: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"));
}
}
}
执行结果: