`
chengyu2099
  • 浏览: 471086 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SQL语句导出excel

阅读更多
/**
 * SaveExcelUtil.java
 * com.linkage.justone4.comm
 *
 * Function: TODO 
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 Dec 6, 2010 		程仁银
 *
 * Copyright (c) 2010,  All Rights Reserved.
*/

package com.linkage.justone4.comm;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * ClassName:SaveExcelUtil
 * Project: 
 * Company: LINKAGE
 *
 * @author   程仁银
 * @version  
 * @since    Ver 1.1
 * @Date	 Dec 6, 2010		4:55:15 PM
 *
 * @see 	 
 */
public class SaveExcelUtil 
{
//	private static Log log = LogFactory.getLog(ExcelUtil.class);
	private static String shtName = "";
	private static String[] cNames = null;
	private static String[] cLabels = null;
	private static int rpp = 200;
	private static HSSFCellStyle style = null;

	/**
	 * 通过给定的Sql导出Excel文件到Response输出流,需要指定Connection 
	 * 
	 * @param response
	 *            HttpServletResponse Response 
	 * @param conn
	 *            Connection 指定的数据库连接
	 * @param sqlStr
	 *            String 查询的Sql语句
	 * @param sheetName
	 *            String 导出的Excel Sheet名称 
	 * @param columnNames
	 *            String[] 导出的 Excel 列名称
	 * @param rowPerPage
	 *            int 每一个Sheet页的行数 
	 * @throws SQLException
	 *             48.
	 */
	public static void export(Connection conn,String sqlStr, String sheetName, String columnNames[],
			int rowPerPage) throws SQLException {
		PreparedStatement ps = null;
		ResultSet rs = null;
		ps = conn.prepareStatement(sqlStr);
		rs = ps.executeQuery();

		ResultSetMetaData rsmd = rs.getMetaData();
		if (rowPerPage <= 10000 && rowPerPage >= 1) {
			rpp = rowPerPage;
		}
		if (!"".equals(sheetName) && null != sheetName) {
			shtName = sheetName;
		} else {
			shtName = rsmd.getTableName(0);
		}
		cNames = getColumnNames(rsmd);
		if (null != columnNames) {
			cLabels = columnNames; // compare( columnNames ) ;
		} else {
			cLabels = cNames;
		}

		HSSFWorkbook wb = new HSSFWorkbook();
		style = wb.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

		HSSFSheet sheet = createSheet(wb, 1);
		setSheetColumnTitle(sheet);
		int rowCnt = 0;
		int sheetNum = 2;

		while (rs.next()) {
			if (rowCnt == rpp) {
				sheet = createSheet(wb, sheetNum);
				setSheetColumnTitle(sheet);
				rowCnt = 0;
				sheetNum++;
			}
			HSSFRow row = sheet.createRow(rowCnt + 1);
			for (int i = 0; i < cNames.length; i++) {

				HSSFCell cell = row.createCell((short) i);
//				cell.setEncoding(HSSFCell.ENCODING_UTF_16);
				String val = rs.getString(cNames[i]);
				if (null == val) {
					val = "";
				}
				cell.setCellValue(val.toUpperCase());
			}
			rowCnt++;
		}
		try {
//			OutputStream os = response.getOutputStream();
//			response.reset();
//			response.setContentType("application/vnd.ms-excel");
//			response.setHeader("Content-disposition", "attachment; filename="+getFileName(shtName));
//			wb.write(os);
			String savePath = "d:\\";
			FileOutputStream fos = new FileOutputStream(new File(savePath,sheetName));
//			fos.close();
			wb.write(fos);
			if (conn != null) {
				conn.close();
			}
		} catch (IOException ex) {
//			log.info("Export Excel file error ! " + ex.getMessage());
		}
	}

	/**
	 *设置Sheet页的列属性
	 * @param sht
	 * HSSFSheet 124.
	 */
	private static void setSheetColumnTitle(HSSFSheet sht) {
		HSSFRow row = sht.createRow(0);
		for (int i = 0; i < cLabels.length; i++) {
			HSSFCell cell = row.createCell((short) (i));
//			cell.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE);
			cell.setCellValue(cLabels[i]);
			cell.setCellStyle(style);
		}
	}

	/**
	 *  获得源数据中的列名称
	 * @param rsmd
	 * ResultSetMetaData
	 * @return String[] 139.
	 */
	private static String[] getColumnNames(ResultSetMetaData rsmd) {
		try {
			StringBuffer result = new StringBuffer("");
			for (int i = 1; i <= rsmd.getColumnCount(); i++) {
				result.append(rsmd.getColumnLabel(i)).append(",");
			}
			if (result.length() > 0) {
				return result.substring(0, result.length() - 1).toString().split(",");
			}
		} catch (Exception e) {
			return null;
		}
		return null;
	}

	/**
	 *创建一个Sheet页并返回该对象 
	 * @param wb
	 * HSSFWorkbook 
	 * @param seq int 
	 * @return HSSFSheet 
	 */
	private static HSSFSheet createSheet(HSSFWorkbook wb, int seq) {
		int sup = seq * rpp;
		int sub = (seq - 1) * rpp + 1;
		if (sub < 1) {
			sub = 1;
		}
		return wb.createSheet(shtName + "(" + sub + "-" + sup + ")");
	}
	
	private static String getFileName(String tableName) {
		return tableName + new java.util.Date().getTime() + ".xls";
	}
}

分享到:
评论

相关推荐

    输入sql语句导出excel

    "输入SQL语句导出Excel"这个主题,涉及到如何通过编程方式执行SQL查询并将结果保存到Excel文件中。下面我们将详细探讨这一过程。 首先,我们需要了解如何在代码中执行SQL查询。通常,这需要使用数据库驱动程序或...

    sql语句导出excel

    将SQL查询结果导出到Excel,能方便我们进一步处理和分享数据。下面将详细介绍如何实现这一过程。 1. **SQL查询基础**: SQL允许我们执行多种操作,如选择(SELECT)、插入(INSERT)、更新(UPDATE)、删除...

    根据sql语句导出Excel工具

    标题中的“根据sql语句导出Excel工具”指的是一个软件工具,它允许用户通过编写SQL查询语句,将查询结果转换并导出为Excel文件格式。这种工具在数据分析、报表生成以及数据共享等方面非常有用,因为SQL是用于访问和...

    sql语句导出Excel格式

    总结来说,SQL语句导出Excel格式是一种常见的数据处理操作,对于数据分析师和业务人员而言,这是一项必不可少的技能。掌握这个技巧可以帮助你更有效地从数据库中获取和分享信息,促进数据驱动的决策过程。

    jxl 实现根据sql语句导出excel文件

    标题 "jxl 实现根据sql语句导出excel文件" 提到的是使用jxl库来创建Excel文件,并根据SQL查询结果填充数据的过程。jxl是一个Java库,它提供了读写Microsoft Excel文件的能力,这对于在Java应用程序中处理和生成报表...

    SQL导出EXCEL(带表头)的存储过程

    ### SQL导出EXCEL(带表头)的存储过程详解 在日常的数据库管理与数据分析工作中,将数据从SQL数据库导出至Excel是常见的需求之一。尤其当涉及到大量的数据处理时,一个能够自动生成带有表头的Excel文件的存储过程...

    SQL 导入导出Excel数据的语句

    SQL 导入导出 Excel 数据的语句 本文将详细介绍如何使用 SQL 语句将数据从 Excel 文件中导入到数据库中,以及如何将数据从数据库中导出到 Excel 文件中。 导入数据 要从 Excel 文件中导入数据到 SQL 数据库中,...

    SQL定时导出数据到Excel

    -- 构建SQL语句 SELECT @sql = '', @fdlist = ''; SELECT @fdlist = @fdlist + ',' + '[' + a.name + ']', @sql = @sql + ',' + '[' + a.name + ']' + CASE WHEN b.name LIKE '%char' THEN CASE WHEN a....

    SQL语句导入导出大全.doc

    本文档旨在提供一个全面的SQL语句导入导出大全,涵盖了与不同数据库和文件的数据导入导出,包括Excel、文本文件、dBase IV、dBase III、FoxPro数据库和Access等。 1. 导出到Excel 使用以下SQL语句可以将数据导出到...

    sql导入导出excel、access工具

    以下是对"sql导入导出excel、access工具"这一主题的详细说明。 1. SQL导入Excel: 当我们有大量数据存储在Excel工作表中,而需要将这些数据迁移到SQL数据库时,可以使用SQL Server Integration Services (SSIS) 或...

    vb sql 导入导出 excel 源码打包

    6. **源码示例**:压缩包中的文件如"VB6.0_导出excel_方法源代码.doc"等,提供了实际的VB6代码示例,可以帮助开发者理解如何实现这些功能。这些源码可以作为学习和开发的起点,以便快速搭建自己的数据交换系统。 7....

    Sql数据与Excel数据的导入和导出

    例如,将`DataTable`中的数据转换为字符串格式以便写入Excel或构造SQL语句。 - **数据类型转换**:使用`ToString()`方法将各种数据类型转换为字符串。 - **字符串拼接与格式化**:使用字符串连接运算符`+`或字符串...

    用sql语句由excel表往sqlserver数据库表中导数据

    ### 使用SQL语句将Excel数据导入SQL Server数据库 在日常工作中,经常需要处理不同格式的数据文件,例如将Excel表格中的数据导入到SQL Server数据库中。本文将详细介绍如何使用SQL语句实现这一操作。 #### 一、...

    直接使用SQL语句读取Excel表格内容,把表中内容导入数据库中

    根据给定的文件信息,我们可以深入探讨如何使用SQL语句直接读取Excel表格内容,并将这些数据导入到数据库中。这一技术在数据迁移、数据整合以及报表自动化等场景下非常实用。下面,我们将详细解析这一过程中的关键...

    sql语句完成数据导出到Excel中

    在使用 Transact-SQL 语句导出数据时,我们需要注意以下几点: * 首先,我们需要了解 Access 数据库的连接信息,例如数据库文件的路径、用户名和密码。 * 其次,我们需要了解 SQL Server 中的数据库连接信息,例如...

    Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]

    1. **导出数据至SQL语句**: 当使用`mysqldump`导出数据时,需确保指定正确的字符集。例如,使用`--default-character-set=utf8`参数来确保导出的SQL文件中的数据以UTF-8编码。如果数据库、表或列的字符集是其他...

    SQL Server导出表到EXCEL文件的存储过程

    6. **表结构构建**:通过查询`syscolumns`和`systypes`系统表获取表的列信息,包括列名和数据类型,并构造用于创建Excel文件中对应表的SQL语句。 7. **执行创建表操作**:使用创建的ADO对象执行构建好的SQL语句,在...

Global site tag (gtag.js) - Google Analytics