﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笨小孩...................................................................................-随笔分类-J2se</title><link>http://www.blogjava.net/fl1429/category/38078.html</link><description>Java,Ruby,Php,Flex,Ajax,UI,Google,Linux...................</description><language>zh-cn</language><lastBuildDate>Tue, 02 Jun 2009 09:55:32 GMT</lastBuildDate><pubDate>Tue, 02 Jun 2009 09:55:32 GMT</pubDate><ttl>60</ttl><item><title>Java 利用poi把数据库中数据导入Excel</title><link>http://www.blogjava.net/fl1429/archive/2009/05/26/278064.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 26 May 2009 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/05/26/278064.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/278064.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/05/26/278064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/278064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/278064.html</trackback:ping><description><![CDATA[<p>效果:</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/fl1429/WindowsLiveWriter/9f4f65c065eb_FB0E/image_2.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="229" alt="image" src="http://www.blogjava.net/images/blogjava_net/fl1429/WindowsLiveWriter/9f4f65c065eb_FB0E/image_thumb.png" width="321" border="0" /></a></p>
<p>使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包</p>
<p>核心代码:</p>
<p>连接数据库:DBConnection.java</p>
<p>
<div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f1c24f53-cff6-47ce-901d-f79fa7bb2444" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:#C0C0C0;overflow: auto;"><span style="color: #000000;">package org.xg.db;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.Connection;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.DriverManager;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.PreparedStatement;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.ResultSet;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.SQLException;
public </span><span style="color: #0000FF;">class</span><span style="color: #000000;"> DBConnection {
private final String DBUrl </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">jdbc:mysql://localhost:3306/notebook</span><span style="color: #800000;">"</span><span style="color: #000000;"> ;
private final String DBDriver </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">com.mysql.jdbc.Driver</span><span style="color: #800000;">"</span><span style="color: #000000;"> ;
private final String username </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">root</span><span style="color: #800000;">"</span><span style="color: #000000;"> ;
private final String password </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">riskfitfeng</span><span style="color: #800000;">"</span><span style="color: #000000;"> ;
private Connection con ;
public DBConnection()
{
</span><span style="color: #0000FF;">try</span><span style="color: #000000;"> {
Class.forName(DBDriver) ;
con </span><span style="color: #000000;">=</span><span style="color: #000000;"> DriverManager.getConnection(DBUrl,username,password) ;
} catch (Exception e) {
</span><span style="color: #000000;">//</span><span style="color: #000000;"> TODO Auto</span><span style="color: #000000;">-</span><span style="color: #000000;">generated catch block
e.printStackTrace();
}
}
public Connection getDB()
{
</span><span style="color: #0000FF;">return</span><span style="color: #000000;"> con ;
}
public void closeDb(ResultSet rs,PreparedStatement ps)
{
</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(rs</span><span style="color: #000000;">!=</span><span style="color: #000000;">null)
{
</span><span style="color: #0000FF;">try</span><span style="color: #000000;"> {
rs.close() ;
} catch (SQLException e) {
</span><span style="color: #000000;">//</span><span style="color: #000000;"> TODO Auto</span><span style="color: #000000;">-</span><span style="color: #000000;">generated catch block
<br />
e.printStackTrace();
}
}
</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(ps</span><span style="color: #000000;">!=</span><span style="color: #000000;">null)
{
</span><span style="color: #0000FF;">try</span><span style="color: #000000;"> {
ps.close() ;
} catch (SQLException e) {
</span><span style="color: #000000;">//</span><span style="color: #000000;"> TODO Auto</span><span style="color: #000000;">-</span><span style="color: #000000;">generated catch block
e.printStackTrace();
}
}
}
}
</span></pre>
</div>
<p>导入excel类:MySql2Excel.java</p>
<p>
<div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f392ac4a-99a7-4445-bafb-75a9fd77fc40" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color:#C0C0C0;overflow: auto;"><span style="color: #000000;">package org.xg.db;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.io.FileOutputStream;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.io.OutputStream;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.Connection;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> java.sql.ResultSet;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> org.apache.poi.hssf.usermodel.HSSFCell;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> org.apache.poi.hssf.usermodel.HSSFRichTextString;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> org.apache.poi.hssf.usermodel.HSSFRow;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> org.apache.poi.hssf.usermodel.HSSFSheet;
</span><span style="color: #0000FF;">import</span><span style="color: #000000;"> org.apache.poi.hssf.usermodel.HSSFWorkbook;
public </span><span style="color: #0000FF;">class</span><span style="color: #000000;"> MySql2Excel {
public MySql2Excel() throws Exception
{
Connection con </span><span style="color: #000000;">=</span><span style="color: #000000;"> null ;
DBConnection db </span><span style="color: #000000;">=</span><span style="color: #000000;"> new DBConnection() ;
con </span><span style="color: #000000;">=</span><span style="color: #000000;"> db.getDB() ;
String sql </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">select * from students</span><span style="color: #800000;">"</span><span style="color: #000000;"> ;
ResultSet rs </span><span style="color: #000000;">=</span><span style="color: #000000;"> con.createStatement().executeQuery(sql) ;
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 获取总列数
int CountColumnNum </span><span style="color: #000000;">=</span><span style="color: #000000;"> rs.getMetaData().getColumnCount() ;
int i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;"> ;
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 创建Excel文档
HSSFWorkbook wb </span><span style="color: #000000;">=</span><span style="color: #000000;"> new HSSFWorkbook() ;
</span><span style="color: #000000;">//</span><span style="color: #000000;"> sheet 对应一个工作页
HSSFSheet sheet </span><span style="color: #000000;">=</span><span style="color: #000000;"> wb.createSheet(</span><span style="color: #800000;">"</span><span style="color: #800000;">student表中的数据</span><span style="color: #800000;">"</span><span style="color: #000000;">) ;
HSSFRow firstrow </span><span style="color: #000000;">=</span><span style="color: #000000;"> sheet.createRow(0); </span><span style="color: #000000;">//</span><span style="color: #000000;">下标为0的行开始
HSSFCell[] firstcell </span><span style="color: #000000;">=</span><span style="color: #000000;"> new HSSFCell[CountColumnNum];
String[] names </span><span style="color: #000000;">=</span><span style="color: #000000;"> new String[CountColumnNum];
names[0] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">ID</span><span style="color: #800000;">"</span><span style="color: #000000;">;
names[</span><span style="color: #000000;">1</span><span style="color: #000000;">] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">学号</span><span style="color: #800000;">"</span><span style="color: #000000;">;
names[</span><span style="color: #000000;">2</span><span style="color: #000000;">] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">姓名</span><span style="color: #800000;">"</span><span style="color: #000000;">;
names[</span><span style="color: #000000;">3</span><span style="color: #000000;">] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">性别</span><span style="color: #800000;">"</span><span style="color: #000000;">;
names[</span><span style="color: #000000;">4</span><span style="color: #000000;">] </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">班级</span><span style="color: #800000;">"</span><span style="color: #000000;">;
</span><span style="color: #0000FF;">for</span><span style="color: #000000;">(int j</span><span style="color: #000000;">=</span><span style="color: #000000;"> 0 ;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">CountColumnNum; j</span><span style="color: #000000;">++</span><span style="color: #000000;">){
firstcell[j] </span><span style="color: #000000;">=</span><span style="color: #000000;"> firstrow.createCell((short)j);
firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
}
</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(rs.next())
{
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 创建电子表格的一行
HSSFRow row </span><span style="color: #000000;">=</span><span style="color: #000000;"> sheet.createRow(i) ; </span><span style="color: #000000;">//</span><span style="color: #000000;"> 下标为1的行开始
</span><span style="color: #0000FF;">for</span><span style="color: #000000;">(int j</span><span style="color: #000000;">=</span><span style="color: #000000;">0;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">CountColumnNum;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)
{
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 在一行内循环
HSSFCell cell </span><span style="color: #000000;">=</span><span style="color: #000000;"> row.createCell((short) j) ;
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 设置表格的编码集，使支持中文
</span><span style="color: #000000;">//</span><span style="color: #000000;">
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 先判断数据库中的数据类型
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 将结果集里的值放入电子表格中
cell.setCellValue(new HSSFRichTextString(rs.getString(j</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">))) ;
}
i</span><span style="color: #000000;">++</span><span style="color: #000000;"> ;
}
</span><span style="color: #000000;">//</span><span style="color: #000000;"> 创建文件输出流，准备输出电子表格
OutputStream out </span><span style="color: #000000;">=</span><span style="color: #000000;"> new FileOutputStream(</span><span style="color: #800000;">"</span><span style="color: #800000;">E:\\person.xls</span><span style="color: #800000;">"</span><span style="color: #000000;">) ;
wb.write(out) ;
out.close() ;
System.out.println(</span><span style="color: #800000;">"</span><span style="color: #800000;">数据库导出成功</span><span style="color: #800000;">"</span><span style="color: #000000;">) ;
rs.close() ;
con.close() ;
}
public static void main(String[] args)
{
</span><span style="color: #0000FF;">try</span><span style="color: #000000;"> {
@SuppressWarnings(</span><span style="color: #800000;">"</span><span style="color: #800000;">unused</span><span style="color: #800000;">"</span><span style="color: #000000;">)
MySql2Excel excel </span><span style="color: #000000;">=</span><span style="color: #000000;"> new MySql2Excel() ;
} catch (Exception e) {
</span><span style="color: #000000;">//</span><span style="color: #000000;"> TODO Auto</span><span style="color: #000000;">-</span><span style="color: #000000;">generated catch block
e.printStackTrace();
}
}
}
</span></pre>
</div>
<p>例如你可以在前端jsp中这样调用:</p>
<p>&lt;a href="ReportServlet" onclick="return confirm('确认数据导出到E:/下?');"&gt;导出数据到Excel&lt;/a&gt;</p>
<p>后台servlet写上上面的代码,注意最后需要response.sendRedirect("") 返回前端</p>
<p>&nbsp;</p>
<p>源码下载:</p>
<p><a title="http://www.namipan.com/d/98cf9d03ab8f39ce3c107bb5b44b642dcb3ba581382a1400" href="http://www.namipan.com/d/98cf9d03ab8f39ce3c107bb5b44b642dcb3ba581382a1400">http://www.namipan.com/d/98cf9d03ab8f39ce3c107bb5b44b642dcb3ba581382a1400</a></p>
<p>poi包下载:</p>
<p><a title="http://www.namipan.com/d/e0493749dd5e3a1f2e28a0a32493e5e026fae4aa1ac69c00" href="http://www.namipan.com/d/e0493749dd5e3a1f2e28a0a32493e5e026fae4aa1ac69c00">http://www.namipan.com/d/e0493749dd5e3a1f2e28a0a32493e5e026fae4aa1ac69c00</a></p>
<img src ="http://www.blogjava.net/fl1429/aggbug/278064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-05-26 18:12 <a href="http://www.blogjava.net/fl1429/archive/2009/05/26/278064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>