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

知识点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);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值