如何将数据库的表导出生成Excel?

原创 2017年08月01日 16:47:14

本篇博客知识点
1.如何通过元数据拿到数据库的信息?
2.如何用Java生成Excel表?
3.将数据库中的表导出生成Excel案例

如何通过元数据拿到数据库的信息

元数据:描述数据的数据

Java中使用元数据的两个方法

  • DatabaseMetaData 通过连接可以拿到的信息:数据库软件,所有数据库名,所有数据库里面的表名,描述数据库的元数据
  • ResultSetMetaData 拿到的表结构信息:获得表的列数目 类型和属性 ,描述数据库表的元数据

DatabaseMetaData 的使用学习

@Test// DatabaseMetaData 通过连接可以拿到的信息:数据库软件,所有数据库名,所有数据库里面的表名
    public void DatabaseMetaData_Demo() throws Exception{
        // 自己写的工具包来获得数据库连接
        Connection con = ConnUtils4.getConn();
        //DatabaseMetaData 通过连接获得
        DatabaseMetaData dbmt =  con.getMetaData();
        // 数据库软件名
        System.out.println(" 数据库软件名:"+dbmt.getDatabaseProductName());
        // 拿到所有数据库名字
        ResultSet rs =dbmt.getCatalogs();
        List<String> tablenames = new ArrayList<String>();
        while(rs.next()){
            String tabname=rs.getString("TABLE_CAT");
            tablenames.add(tabname);
            System.out.println("数据库名字:"+tabname);
        }
        System.out.println("--------------");;
        //拿到某个数据库李曼所有的表名---可以指定表的类型
        rs = dbmt.getTables("ake", "ake", null, new String[]{"TABLE","VIEW"});
        while(rs.next()){
            System.out.println("数据库ake里的表名:"+rs.getString("TABL`````
_NAME"));
        }
    }

这里写图片描述

ResultSetMetaData的使用学习

@Test// ResultSetMetaData 拿到的表结构信息:获得表的列数目  类型和属性 
    public void ResultSetMetaData_Demo2() throws Exception{
        // 自己写的工具包来获得数据库连接
        Connection con = ConnUtils4.getConn();
        String sql = "select * from ake.book";
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);
        // ResultSetMetaData 通过 查询的返回集获取
        ResultSetMetaData rsmt = rs.getMetaData();
        //获得表的列数
        int n =rsmt.getColumnCount();
        //类型---某一列
//       getColumnTypeName:INT
        //某医疗的名字
//      getColumnName:id
        //某一列的长度
//      getColumnDisplaySize:11
        for(int i=1;i<n;i++){
            System.out.println(rsmt.getTableName(i)+"表的第"+i+"列描述信息");
            System.out.println("getColumnDisplaySize:"+rsmt.getColumnDisplaySize(i));
            System.out.println("getColumnLabel:"+rsmt.getColumnLabel(i));
            System.out.println("getColumnName:"+rsmt.getColumnName(i));
            System.out.println("getColumnType:"+rsmt.getColumnType(i));
            System.out.println("getColumnTypeName:"+rsmt.getColumnTypeName(i));
            System.out.println("getPrecision:"+rsmt.getPrecision(i));
            System.out.println("getScale:"+rsmt.getScale(i));
            System.out.println("getSchemaName:"+rsmt.getSchemaName(i));
            System.out.println("------------");
        }
        con.close();
    }

这里写图片描述

拿出ake表里面所有的内容~~~~

// 拿出ake表里面所有的内容~~~~
    public static void main(String[] args) throws Exception{
        Connection con = ConnUtils4.getConn();
        System.out.println(con);
        DatabaseMetaData dbmt = con.getMetaData();
        //拿到所有的ake所有表名
        ResultSet rs =dbmt.getTables("ake", "ake", null, new String[]{"TABLE","VIEW"});
        List<String> tablenames = new ArrayList<String>();
        while(rs.next()){
            String tablename = rs.getString("TABLE_NAME");
            tablenames.add(tablename);
        }
        for(String tablename:tablenames){
            System.out.println(tablename+"表:");
            if(tablename.equals("img")){
                continue;
            }
            String sql = "select * from ake."+tablename;
            Statement st = con.createStatement();
            ResultSet RS = st.executeQuery(sql);
            ResultSetMetaData rsmt = RS.getMetaData();
            // 拿到列数
            int colnums = rsmt.getColumnCount();
            for(int i=1;i<=colnums;i++){
                //拿到表头信息
                String colName = rsmt.getColumnName(i);
                System.out.print(colName+"\t");
            }
            System.out.println();

            while(RS.next()){
                for(int i=1;i<=colnums;i++){
                    //拿到表信息
                    System.out.print( RS.getString(i)+"\t");
                }
                System.out.println();
            }

        }
        con.close();
    }

我把那到的表格信息输出
这里写图片描述
这里写图片描述

如何用Java生成Excel表?

需要一个插件工具包
这里写图片描述

@Test
    public void Workbook_demo() throws Exception{
        // 建立一个工作表--相当于一个数据库
        Workbook book = new HSSFWorkbook();
        // 数据库中的一个表
        Sheet sheet1 =book.createSheet("表1");
        // 行
        Row row =sheet1.createRow(4);
        // 单元格
        Cell cell = row.createCell(3);
        // 写入数据
        cell.setCellValue("通过java写的Excel");
        // 保存到银盘
        book.write( new FileOutputStream("d:a/a.xls"));
    }

这里写图片描述

将数据库中的表导出生成Excel案例

public static void main(String[] args) throws Exception {
        //把数据库里所有的信息导入到Excel表中~
        Connection con = ConnUtils4.getConn();
        DatabaseMetaData dbmt = con.getMetaData();
        //要通过 DatabaseMetaData 拿到所有数据库的名字
        List<String> Database_Names = new ArrayList<String>();
        ResultSet rs =dbmt.getCatalogs();
        while(rs.next()){
            Database_Names.add(  rs.getString("TABLE_CAT"));
        }
        //DatabaseMetaData 拿到所有数据表名
        int m = 0;
        for(String Database_Name:Database_Names){
            if(!Database_Name.equals("ake")){
                continue;
            }
//          if(m++>=3){
//              break;
//          }
            // 一个数据库对于一个 Excel文档~
            Workbook book = new HSSFWorkbook();
            rs = dbmt.getTables(Database_Name, Database_Name, null, new String[]{"TABLE","VIEW"});
            //封装所有表名
            List<String> Table_Names = new ArrayList<String>();
            while(rs.next()){
                Table_Names.add(  rs.getString("TABLE_NAME"));
            }
            for(String Table_Name:Table_Names){
                if("img".equals(Table_Name) ||"note".equals(Table_Name) ){ // img为二进制文件导入会出错
                    continue;
                }
                //创建一个表
                Sheet sheet = book.createSheet(Table_Name);
                Statement st = con.createStatement();
                String sql = "select * from "+Database_Name+"."+Table_Name;
//              System.out.println("sql:"+sql);
                rs = st.executeQuery(sql);
                //设置表头信息
                 Row row1 = sheet.createRow(0);
                 ResultSetMetaData rsmd = rs.getMetaData();
                 int colnum = rsmd.getColumnCount();
                 for(int i=1;i<=colnum;i++){
                     String name = rsmd.getColumnName(i);
                     Cell cell = row1.createCell(i-1);
                     cell.setCellValue(name);
//                   System.out.print(name+"\t");
                 }
//               System.out.println();
                 //设置表格信息
                 int idx = 1;
                 while(rs.next()){
                     Row row = sheet.createRow(idx++);
                     for(int i=1;i<=colnum;i++){
                         String str = rs.getString(i);
//                       System.out.print(str+"\t");
                         Cell cell = row.createCell(i-1);
                         cell.setCellValue(str);
                     }
//                   System.out.println();
                 }
            }

            book.write( new FileOutputStream( "d:a/"+Database_Name+".xls"));
        }


    }

执行结果就成功啦!
这里写图片描述
这里写图片描述
这里写图片描述

版权声明:本文为博主原创文章,大家一起学习进步。

相关文章推荐

调用浏览器下载图片 java实现

导论: JavaWeb下载文件一般分为两类,其中一类例如.txt,.excel,.zip等浏览器可以识别的文件类型,可以利用标签的链接实现,但是图片的下载确比较麻烦,当使用链接时,浏览器不识别图片的...

JVM进阶(十一)——JAVA G1收集器

JVM进阶(十一)——JAVA G1收集器  在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器——G1收集器。 先讲讲G1收集器的特点,他也是个多线程的收集...

如何将C#中将TextBox的数据以及从数据库中查询得到的数据导出到Excel中

最近在做一个项目,其中需要将数据导出到Excel中去,今天总结下具体实现过程,方便大家使用,希望能够帮到大家!!! 首先我们写一个函数,功能是将DataSet中的数据添加到Excel中去,一下是函数体...

如何将hive表文本格式的源文件迁移至Oracle数据库或者excel文档中

我们知道hive中表结构是保存在txt文件中,其中字段间的间隔符可以由用户指定。当我们拿到hdfs中的文本格式的源文件时,表结构往往不太清晰,不利于我们做一些加工处理,我们往往希望将其转换为excel...

如何将 Oracle 数据导出到 Excel表中 --转载

先说一个简单的方法:在sqlplus中查询出数据,然后选择行项右键,有个复制到Excel,ok! 1、操作系统:windows 2000 Server,机器内存128M   2、数据库: Or...

如何将mysql表结构导出成Excel格式的(并带备注)

方法一 1.使用一个MySQL管理工具:SQLyog,点击菜单栏“数据库”下拉的最后一项: 导出的格式如下: 2.要想转成Excel格式的只需手动将该表复制到Exce...

如何将excel.xls导入ms sqlserver 数据库

方法一:直接利用企业管理器的向导导入:这时需要excel.xls中的字段与数据库中表的字段相对应。需要注意:表中只读的字段,比如id自增要重新修改为不自增才可成功导入,但是,有可能表中的字段属性和ex...
  • lyl0609
  • lyl0609
  • 2011年11月16日 11:09
  • 258

asp.net 如何将excel导入数据库

asp.net 如何将excel导入数据库 分类:IT技术 2008.4.214:25 作者:smartrain |评论:0 | 阅读:0 1、Excel数据导入到数据库中: ...
  • YaoXTao
  • YaoXTao
  • 2012年03月06日 12:44
  • 3209

如何将excel表格文件导成SQLite数据库文件(.xls-->.db)

导读:首先声明小编刚开始开发android只有4个月左右,所以有不足之处敬请各位指出,小编在此先行谢过。 最近由于公司项目需求需要将一些固定的数据放在本地,也就是app里面。通过查询资料决定...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何将数据库的表导出生成Excel?
举报原因:
原因补充:

(最多只允许输入30个字)