`
lhxctc
  • 浏览: 52172 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

根据SQL结果集构建动态二维列表展示在excel中

    博客分类:
  • Java
阅读更多
近期在项目中用到根据SQL结果集构建动态二维列表展示在excel中。把它贴出来希望对大家有帮助。
数据库是mysql,操纵excel是使用apache POI SpreadSheet,如对POI不熟,请查看我的另外一文章Apache POI SpreadSheet的一些简单应用
代码如下:
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
/**
 * 
 * 
 * 主要是将一些数据组织成二维表以便汇总
 * 
 * 如:
 * 
 * 			战略1	战略2	战略3
 * 
 * 项目1		20		20		30
 * 项目2		30		15		40
 * ...
 * 
 */
public class XZou {

	static Connection con = null;

	static {

		try {
			Class.forName("com.mysql.jdbc.Driver");

			con = DriverManager
					.getConnection(
							"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8",
							"root", "root");
			
			PreparedStatement pst = con.prepareStatement("drop table if exists project;");
			
			pst.execute();
			
			pst = con.prepareStatement("create table project (pro varchar(20) not null comment '项目名称',sta varchar(20) not null comment '战略名称',mark float comment '值');");
			
			pst.execute();
			
			pst =  con.prepareStatement("insert into project (pro,sta,mark) values (?,?,?)");
			
			///////////////////////////////////////////////
			pst.setString(1, "项目1"); pst.setString(2, "战略1"); pst.setFloat(3, 30.0f);
			pst.addBatch();
			pst.setString(1, "项目1"); pst.setString(2, "战略2"); pst.setFloat(3, 40.0f);
			pst.addBatch();
			pst.setString(1, "项目1"); pst.setString(2, "战略3"); pst.setFloat(3, 50.0f);
			pst.addBatch();
			pst.setString(1, "项目2"); pst.setString(2, "战略1"); pst.setFloat(3, 40.0f);
			pst.addBatch();
			pst.setString(1, "项目2"); pst.setString(2, "战略2"); pst.setFloat(3, 50.0f);
			pst.addBatch();
			pst.setString(1, "项目2"); pst.setString(2, "战略3"); pst.setFloat(3, 60.0f);
			pst.addBatch();
			pst.setString(1, "项目2"); pst.setString(2, "战略4"); pst.setFloat(3, 40.0f);
			pst.addBatch();
			pst.setString(1, "项目3"); pst.setString(2, "战略1"); pst.setFloat(3, 50.0f);
			pst.addBatch();
			pst.setString(1, "项目3"); pst.setString(2, "战略2"); pst.setFloat(3, 40.0f);
			pst.addBatch();
			pst.setString(1, "项目3"); pst.setString(2, "战略4"); pst.setFloat(3, 30.0f);
			pst.addBatch();
			pst.setString(1, "项目4"); pst.setString(2, "战略1"); pst.setFloat(3, 50.0f);
			pst.addBatch();
			pst.setString(1, "项目4"); pst.setString(2, "战略2"); pst.setFloat(3, 20.50f);
			pst.addBatch();
			pst.setString(1, "项目4"); pst.setString(2, "战略3"); pst.setFloat(3, 30.0f);
			pst.addBatch();
			pst.setString(1, "项目4"); pst.setString(2, "战略4"); pst.setFloat(3, 90.0f);
			pst.addBatch();
			pst.setString(1, "项目5"); pst.setString(2, "战略1"); pst.setFloat(3, 40.0f);
			pst.addBatch();
			pst.setString(1, "项目5"); pst.setString(2, "战略3"); pst.setFloat(3, 30.0f);
			pst.addBatch();
			pst.setString(1, "项目5"); pst.setString(2, "战略4"); pst.setFloat(3, 30.0f);
			pst.addBatch();
			
			
			pst.executeBatch();

		} catch (Exception ex) {
			throw new ExceptionInInitializerError(ex);
		}
	}

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

		int startRow = 8, startCell = 6;
		
		List<X> xList = new ArrayList<X>();
		
		PreparedStatement pst = con.prepareStatement("select pro from project group by pro");
		
		ResultSet rs = pst.executeQuery();
		
		while(rs.next()){
			
			xList.add(new X(rs.getString(1)));
			
		}
		
		Map<String, Integer> yMap = new HashMap<String, Integer>();
		
		
		
		pst = con.prepareStatement("select sta from project group by sta");
		
		rs = pst.executeQuery();
		
		int tempStartCell = startCell;
		
		while(rs.next()){
			
			yMap.put(rs.getString(1), ++tempStartCell);
			
		}
		
		

		pst = con.prepareStatement("select pro,sta,mark from project group by pro,sta");
		
		rs = pst.executeQuery();
		
		while(rs.next()){
			
			
			for(X x: xList){
				
				if(x.getName().equals(rs.getString(1))){
					
					x.getYList().add(new Y(rs.getString(2),rs.getFloat(3)));
				}
				
			}
			
		}
			
		rs.close();
		
		pst.close();
		
		////////////////////////////////////////////////////////////////////
		
		HSSFWorkbook wb = new HSSFWorkbook();
			
		HSSFSheet sheet = wb.createSheet("测试");
		
		HSSFCellStyle style = wb.createCellStyle();
		
		HSSFFont font = wb.createFont();
		
		font.setColor(HSSFColor.RED.index);
		
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中现实

		style.setFont(font);//设置颜色
		
		HSSFRow xRow = sheet.createRow(startRow - 1);//确立X,所有列
		
		for(Iterator<Map.Entry<String, Integer>> it = yMap.entrySet().iterator(); it.hasNext(); ){
			
			Map.Entry<String, Integer> map = it.next();
			
			HSSFCell cell = xRow.createCell(map.getValue());
			
			cell.setCellStyle(style);

			cell.setCellValue(new HSSFRichTextString(map.getKey()));
			
		}
		
		for(int i = 0; i<xList.size(); i++){//确立Y,行
			
			X x = xList.get(i);
			
			HSSFRow row = sheet.createRow(startRow + i);//创建行
			
			HSSFCell cell = row.createCell(startCell);
			
			cell.setCellStyle(style);
			
			cell.setCellValue(new HSSFRichTextString(x.getName()));
			
			for(int j = 0; j<x.getYList().size(); j++){
				
				Y y = x.getYList().get(j);
				
				cell = row.createCell(yMap.get(y.getName()));
				
				cell.setCellStyle(style);
				
				cell.setCellValue(y.getValue());
				
			}
			
			
		}

		wb.write(new FileOutputStream("c:/wd.xls"));//写一个excel文件
		
		
		
		
	}

}

/**
 * X 项目
 */
class X{
	
	private String name;//项目名称
	
	private List<Y> yList = new ArrayList<Y>();//项目对应的所有的战略集合
	
	public X(){
		
	}
	public X(String name){
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Y> getYList() {
		return yList;
	}

	public void setYList(List<Y> list) {
		yList = list;
	}
	
	
	
	
}

/**
 * 战略
 */
class Y{
	
	private String name;//战略名称
	
	private float value;//项目名称关联战略名称对应的mark值
	
	public Y(String name,float value){
		
		this.name = name;
		
		this.value = value;
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public float getValue() {
		return value;
	}

	public void setValue(float value) {
		this.value = value;
	}
	
	
	
}

分享到:
评论

相关推荐

    sql2005全文检索.doc

    主要处理对象 关系二维数据 结构化多维数据 层次型数据 大容量二维和层次型数据的模糊检索 主要应用领域 一般的OLTP类应用 一般的OLAP类分析型应用 面向Internet、Intranet的松散耦合SOA应用 企业/网站内部信息/知识...

    asp.net知识库

    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...

    MetaModelExample:在 TestNG DataProvider 中使用 MetaModel API 的示例

    使用 MetaModel 提供的 SQL 查询 API 来构建 DataProvider 方法返回的二维数组。 三个例子,包括: 从 Excel .XLS 或 .XLSX 文件读取数据的 DataProvider。 从 CSV 文件读取数据的 DataProvider。 从 XML 文件读取...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例239 结果集与Bean列表 301 实例240 编写MD5查看器 302 实例241 基于Base64编码 304 实例242 基于Base64解码 305 实例243 发送简单的Email 306 实例244 发送带附件的Email 308 实例245 读取XML文件属性 310 第3篇...

    数据库系统教学设计.docx

    第二环节 趁热打铁 新知构建 (16分钟) 教师活动 学生活动 设计意图 一、概念讲解 讲解数据库的概念:指有组织地、动态地存储在辅助存储器上的,能为多个用户共享的、与运用程序能彼此独立地一组相互关联着的数据...

    VC与Labview、Matlab编程论文资料[2].rar

    MATLAB与VC混合编程技术在数控机床动态特性监测分析中的 Matlab与VC通用接口程序的实现.pdf MATLAB中调用VC混合编程方法的研究与实现.pdf MATLAB和LabVIEW混合编程及在控制系统中的应用.pdf MATLAB和VC_联合编程...

    VC与Labview、Matlab编程论文资料

    MATLAB与VC混合编程技术在数控机床动态特性监测分析中的 Matlab与VC通用接口程序的实现.pdf MATLAB中调用VC混合编程方法的研究与实现.pdf MATLAB和LabVIEW混合编程及在控制系统中的应用.pdf MATLAB和VC_联合编程...

    VC与Labview、Matlab编程论文资料[4].rar

    MATLAB与VC混合编程技术在数控机床动态特性监测分析中的 Matlab与VC通用接口程序的实现.pdf MATLAB中调用VC混合编程方法的研究与实现.pdf MATLAB和LabVIEW混合编程及在控制系统中的应用.pdf MATLAB和VC_联合编程...

    易特服装销售管理软件 v5.6.zip

    3)二维输入,所有的单据都采用了二维颜色尺码输入数量方式 4)前台销售支持POS小票打印,顾显显示,钱箱驱动,多种结算方式 1、支持POS销售。可以根据需要选配打印机、读卡器、会员卡、条码枪、钱箱、顾客显示屏及...

Global site tag (gtag.js) - Google Analytics