从数据库导出数据到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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MATLAB语音信号处理「建议收藏」

    MATLAB语音信号处理「建议收藏」数字信号处理课设,我们使用MATLAB对语音信号进行了一系列处理,并将其所有功能集中于下图界面中:这个界面涉及功能众多,其中包括语音信号的观察分析、音色变换、AM调制解调、减抽样、加噪去噪、相频分析和幅频滤波等,最重要的是对MATLAB中函数的掌握,通过不同函数的组合实现你想要实现的功能。本篇不会给出整个界面的程序,下面会分块给出每个功能的程序,整个界面只需GUI设计界面文件…

    2022年5月26日
    45
  • 控制流和数据流的区别_jdk动态代理底层原理

    控制流和数据流的区别_jdk动态代理底层原理JBPM工作流原理

    2025年10月1日
    3
  • Android studio学习笔记:adb被系统空闲进程占用了怎么办?

    Android studio学习笔记:adb被系统空闲进程占用了怎么办?在准备run的时候,adbserver报错:UnabletoopenconnectiontoADBserver:java.io.IOException:Can’tfindadbserveronport5037,IPv4attempt:Connectionrefused:connect,IPv6attempt:Connectionrefused:connect发现端口号5037被占用了,看网上的教程都是被一般进程给占用了,可以直接taskkill掉,空出端口

    2022年10月20日
    2
  • EmguCv模板匹配[通俗易懂]

    模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。先贴上简陋的界面图  代码:Matsrc=newImage&lt;Bgr,byte&gt;(ib_o…

    2022年4月8日
    45
  • 在vue中引入外部的css文件「建议收藏」

    在vue中引入外部的css文件「建议收藏」在vue中引入外部的css文件在项目的src文件下,新建一个style文件夹,存放css文件。1.全局引入将外部的css文件放到style文件下,引入外部文件只需在main.js文件中import’./style/reset.css’我引入的是清除默认样式的css文件2.局部引入&lt;stylescoped&gt;@import’../assets/ico……

    2022年10月8日
    4
  • Okio的使用和源码解析「建议收藏」

    Okio的使用和源码解析「建议收藏」一.javaNIO和堵塞I/O的区别  1.阻塞I/O通信模型:    阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时才会返回       2.javaNIO原理及通信模型    JavaNIO是在jdk1.4开始使用的,是一种非阻塞式的I/O    javaNIO的工作原理:      (1)Jav

    2022年5月20日
    38

发表回复

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

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