从数据库导出数据到Excel表(jxl.jar)

从数据库导出数据到Excel表(jxl.jar)

package com.*****.query;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Statement;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import jxl.*;

import jxl.write.*;

import jxl.write.biff.RowsExceededException;

/**

* 对Excel表进行操作

*

* @author ********

*

*/

public class ExcelUtil {

private static Log log = LogFactory.getLog(ExcelUtil.class);

public boolean DB2Excel(ResultSet rs,OutputStream os) {

boolean flag = false;

WritableWorkbook workbook = null;

WritableSheet sheet = null;

Label label = null;

// 创建Excel表

try {

// workbook = Workbook.createWorkbook(new File(“d:/output.xls”));

workbook = Workbook.createWorkbook(os);

// 创建Excel表中的sheet

sheet = workbook.createSheet(“First Sheet”, 0);

// 定义表中的数据

// Label label = new Label(0, 0, “k k 中国人*”);

// Label label1 = new Label(0, 1, “A label record”);

// Label label3 = new Label(0, 2, “3.14159”);

// Number number = new Number(1, 1, 3.1459);

// 向Excel中添加数据

ResultSetMetaData rsmd = rs.getMetaData();

int columnCount = rsmd.getColumnCount();

String colName = null;

int row = 0;

// 添加标题

for (int i = 0; i < columnCount; i++) {

colName = rsmd.getColumnName(i + 1);

label = new Label(i, row, colName);

// log.info(“标题:”+i+”—“+row +”—“+ colName);

sheet.addCell(label);

}

row++;

log.info(“写入标题成功”);

while (rs.next()) {

for (int i = 0; i < columnCount; i++) {

label = new Label(i, row, rs.getString(i+1));

// log.info(“行:”+i+”—“+row +”—“+ rs.getString(i+1));

sheet.addCell(label);

}

row++;

}

log.info(“写入内容成功”);

// 关闭文件

workbook.write();

workbook.close();

log.info(“数据成功写入Excel”);

flag = true;

} catch (SQLException e) {

log.info(e.getMessage());

} catch (RowsExceededException e) {

log.info(e.getMessage());

} catch (WriteException e) {

log.info(e.getMessage());

} catch (IOException e) {

log.info(e.getMessage());

} finally{

try {

workbook.close();

} catch (Exception e) {

}

}

return flag;

}

public static void main(String[] args) {

try {

Class.forName(“net.sourceforge.jtds.jdbc.Driver”);

Connection con = DriverManager

.getConnection(

“jdbc:jtds:sqlserver://localhost:1433/abc”,

“sa”, “sa”);

Statement st = con.createStatement();

ResultSet rs = st

.executeQuery(“select * from abc.dbo.sss”);

// if (!new ExcelUtil().DB2Excel(rs)){

// log.info(“数据写入失败”);

// }

rs.close();

st.close();

con.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

在servlet中的使用

// 写入EXCEL

if (action != null &&amp; action.startsWith(“excel.q”)) {

try {

// response.setContentType(“application/vnd.ms-Excel”);

//设置文件输出成Excel文件,在网页上的点击链接,就会下载成report.xls

response.setHeader(“Content-Disposition”, “attachment; filename=report.xls”);

st = con.createStatement();

rs = st.executeQuery(sql);

System.out.println(sql);

OutputStream os = response.getOutputStream();

if (!new ExcelUtil().DB2Excel(rs, os)) {

log.info(“Excel写入失败”);

}

os.flush();

os.close();

} catch (Exception e) {

log.info(e.getMessage());

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100649.html原文链接:https://javaforall.net

(0)
上一篇 2021年4月24日 上午8:00
下一篇 2021年4月24日 上午10:00


相关推荐

  • Win10总是开机黑屏?显卡驱动安装失败-驱动人生解决方案

    Win10总是开机黑屏?显卡驱动安装失败-驱动人生解决方案驱动人生了解到,自从win10系统发布以来,越来越多的用户都将系统给换成win10系统了。但是面对的用户基数大,系统难免会有不完善的地方。相信很多用户在使用过程中都会因为win10的各种毛病而被坑过,比如电脑开机就出现黑屏2分钟的问题。正常情况下,win10系统应该是开机后就可以显示的,不会出现需要黑屏2分钟左右的时间。这到底是哪里出现问题了呢?  经过驱动人生官方运维人员的检查发现,这个是因为Win10系统中潜在的一些bug导致的,如果大家的显卡有问题或者显卡驱动有问题,在开机后就会黑屏1-3分钟

    2022年5月5日
    83
  • C++学习——动态内存分配「建议收藏」

    C++学习——动态内存分配「建议收藏」文章目录何为静态内存分配?为什么需要动态内存分配解决方法:动态内存分配动态申请内存操作符 newnew 类型名T(初始化参数列表)释放内存操作符deletedelete 指针名p注意问题内存泄露举例申请和释放动态数组动态创建多维数组何为静态内存分配?通常定义变量(或对象),编译器在编译时可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候事先为他们分配确定的存储空间。这种…

    2022年8月18日
    9
  • 自动化测试平台(一):前期准备和后端服务搭建「建议收藏」

    自动化测试平台(一):前期准备和后端服务搭建「建议收藏」本专栏会基于djangorestframework+react,并结合这些年自己构建多个自动化测试平台的经验,做一些自动化、平台、测试开发方面的技术、经验分享。会从0开始搭建一个前后端分离的自动化测试平台。由于是免费教程,对于太过初级的内容不会详细进行讲解,更多的是分享自己的理念和开发过程分享。

    2022年6月29日
    24
  • CreatePipe()函数「建议收藏」

    CreatePipe()函数「建议收藏」CreatePipe()函数原型BOOLCreatePipe(PHANDLEhReadPipe;//指向管道读句柄PHANDLEhWritePipe;//指向管道写句柄LPSECURITY_ATTRIBUTESlpPipeAttributes;//指向管道安全属性DWORDnSize;//管道大小SECURITY_ATTRIBUTES结构体typedefstruct_SECURITY_ATTRIBUTES{ DWORDnLength;//结构体大小,可用siz

    2022年7月26日
    9
  • DataGridview获取选中行数「建议收藏」

    DataGridview获取选中行数「建议收藏」DataGridvie获取选中行数代码:dataGridView1.CurrentRow.Index//获取选中行数使用Messbox.Show()弹窗:

    2022年7月15日
    18
  • StateMachine

    StateMachine

    2021年9月10日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号