mysql:day6--将数据导出到xls表格

来源:互联网 发布:国家护理质量数据平台 编辑:程序博客网 时间:2024/04/30 16:05

知识点1:数据库元数据操作

元数据:描述数据的诗句

获取数据库的元信息

站在数据库的角度操作
通过

DatabaseMetaData dm = con.getMetaData();

动态获取数据库名:
相当于执行: show databases;

ResultSet rs = dm.getCatalogs();//相当于执行: show databases;

知道了数据名,动态获取表名

        ResultSet rs2 = dm.getTables("aa", "aa", null, new String[]{"TABLE"});        while(rs2.next()){            System.out.println(rs2.getString("TABLE_NAME"));        }

在知道数据库名与表名的情况下,可以通过跨库查询,把表头和表内容都查询出来

输出表头信息

ResultSetMetaData rsmt = rs.getMetaData();int columns = rsmt.getColumnCount();for(int i=0;i<columns;i++){    System.out.print(rsmt.getColumnName(i+1)+"\t");}

输出表数据:

while(rs.next()){            System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3)+"\t"+rs.getString(4)+"\t"+rs.getInt(5));        }

知识点二:通过Apache公司的poi的jar包可以将数据导出,这里我们着重将导出到xls表格。

思想是与dom模型一样的
2007版本之前用xls—HSSF
2007版之后用xlsx—XSSF
本质是new一个HSSFWorkbook对象(工作薄)写到文件流FileOutputStream中去。
建立表:

HSSFSheet sheet =   book.createSheet();

建立行

HSSFRow row1 =sheet.createRow(1);

插入列:

row1.createCell(3).setCellValue("这是我测试的字符");

这里要注意的是,因为xls本质是帮我们建好了表格,所以我们可以直接指定行号和列号使用。 在xls显示的时候行列号是从1开始的,但是在我们代码中行列号是从0开始的

小细节:

我们写代码的时候,要尽量避免结果集套接:在一个结果集操作的内部进行其他结果集操作,一个结果集的回退或者提交会波及另一个。

本文知识点练习代码如下:

MetaDataDemo

注意:要导入数据库连接jar包才能成功连接数据库

package cn.hncu.meta;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;import org.junit.Test;import cn.hncu.pool.day2.v2.ConnsUtils3;/** * 元数据操作   元数据:描述数据的数据 *  * @author <a href="mailto:wyj950411@foxmail.com">军街</a> * * @version 1.0 2016-8-10 */public class MetaDataDemo {    /**     * 站在数据库的角度操作     * @throws Exception      */    @Test    public void databaseMetaDataDemo() throws Exception{        Connection con = ConnsUtils3.getCon();        DatabaseMetaData dm = con.getMetaData();        //获取数据库的元信息        System.out.println(dm.getDriverName());        System.out.println(dm.getURL());        System.out.println(dm.getDriverVersion());        System.out.println(dm.getMaxStatements());        System.out.println(dm.getJDBCMajorVersion());        System.out.println("=========================");        //动态获取数据库名        ResultSet rs = dm.getCatalogs();//相当于执行: show databases;        while(rs.next()){            System.out.println(rs.getString(1));        }        System.out.println("------------下面输出表名-------------");        con.createStatement().execute("use aa");//使用aa数据库        //知道了数据名,动态获取表名        ResultSet rs2 = dm.getTables("aa", "aa", null, new String[]{"TABLE"});        while(rs2.next()){            System.out.println(rs2.getString("TABLE_NAME"));        }    }    //在知道数据库名与表名的情况下,可以通过跨库查询,把表头和表内容都查询出来    @Test    public void ResultSetMetaDataDemo() throws Exception{        Connection con = ConnsUtils3.getCon();        Statement st = con.createStatement();        String sql ="select * from test.sstud";        ResultSet rs = st.executeQuery(sql);        //输出表头信息        ResultSetMetaData rsmt = rs.getMetaData();        int columns = rsmt.getColumnCount();        for(int i=0;i<columns;i++){            System.out.print(rsmt.getColumnName(i+1)+"\t");        }        System.out.println();        System.out.println("-------------------------------------------------");        while(rs.next()){            System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3)+"\t"+rs.getString(4)+"\t"+rs.getInt(5));        }    }}

XlsDataDemo

注意:练习这个的时候一定要导poi的jar包才能使用

package cn.hncu.meta;import java.io.FileOutputStream;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.junit.Test;import cn.hncu.pool.day2.v2.ConnsUtils3;public class XlsDataDemo {    @Test    public void xlsDemo() throws Exception{        HSSFWorkbook book = new HSSFWorkbook();        FileOutputStream fout = new FileOutputStream("a.xls");        HSSFSheet sheet =   book.createSheet();        HSSFRow row1 =sheet.createRow(1);        row1.createCell(3).setCellValue("这是我测试的字符");        book.write(fout);    }    /**     * 做一个将数据库的数据导出到一个xls表格当中     * @throws Exception      */    @Test    public void import2XLS () throws Exception{        String databaseName =  "aa";//要导出的数据库        String fileName = "b.xls";//要导出的xls的文件名        doImport2XLS(databaseName,fileName);    }    private void doImport2XLS(String databaseName,String fileName) throws Exception{        Connection con = ConnsUtils3.getCon();        Statement st = con.createStatement();        DatabaseMetaData dm =  con.getMetaData();        ResultSet rs = dm.getTables(databaseName, databaseName, null, new String[]{"TABLE"});        List<String> list = new ArrayList<String>();        while(rs.next()){            list.add(rs.getString("TABLE_NAME")); //将此数据库中的每一个表都加到list中去        }        HSSFWorkbook book = new HSSFWorkbook();        FileOutputStream fout = new FileOutputStream(fileName);        for(String tableName: list){ //对于每一个表 我们都去把它导出到xls中            String sql = "select * from "+tableName;            HSSFSheet sheet = book.createSheet(tableName);            rs = st.executeQuery(sql);            ResultSetMetaData rsmd = rs.getMetaData();            int columns = rsmd.getColumnCount();            int index = 0;            while(rs.next()){                HSSFRow row =  sheet.createRow(index++);                for(int i=0;i<columns;i++){                    row.createCell(i).setCellValue(rs.getString(i+1));                }            }        }        book.write(fout);    }}
0 0
原创粉丝点击