美文网首页
导出csv文件

导出csv文件

作者: 林太浪先生 | 来源:发表于2019-07-10 14:58 被阅读0次

    当接到业务需求为为每张表的内容导出到csv文件时,导出功能其实并不难做,这里可以参考Java导出CSV文件 - 废物大师兄 - 博客园

    问题是,当有大量的表需要导出时,对每张表起一个线程进行操作实际上是很复杂的,而且不具备很高的复用性,因此能将导出的方法再进行一次封装,使其具备更高的重用性是有必要的。

    ResultSetMetaData resultSetMetaData =resultSet.getMetaData();

    int a = resultSetMetaData.getColumnCount();//返回字段数

    resultSetMetaData.getColumnTypeName(i+1));返回字段类型

    FileOutputStream fos =new FileOutputStream("文件地址");

    OutputStreamWriter osw =new OutputStreamWriter(fos,"GBK");

    CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(replace);//注意,这里的replace实际上是一个String数组类型,因为withHeader方法内的参数实际上不固定,这个方法是为我们写的csv文件表头,因为我们每张表的字段不一样,所以用数组存字段,再将其放入参数是一个好办法。

    CSVPrinter csvPrinter =new CSVPrinter(osw,csvFormat);

    //设置初始的数组,目前包含的表最多有四十个字段左右

                String[]  s = new String[42];

                //初始化数组

                for(int i = 0; i<s.length;i++){

                    s[i] = "";

                }

                //将字段名与字段类型相对应

                Map<String,String> map = new HashMap<>();//这里的map是为了将字段名和字段类型做一个对应

    for(int i = 0;i<a;i++){

                    s[i]=resultSetMetaData.getColumnName(i+1);

                    map.put(s[i],resultSetMetaData.getColumnTypeName(i+1));

                }

    //截取数组,多余的值不要,否则会报CSV栏目名重复错误

    String[] replace =new String[a+1];

    for(int i =0;i<a;i++){

    replace[i] = s[i];

    }

    while(resultSet.next()) {

    for (int i =0; i < a; i++) {

    if (map.get(replace[i]) =="VARCHAR") {

    replace[i] =resultSet.getString(replace[i]);

            }else if (map.get(replace[i]) =="INT") {

    replace[i] = String.valueOf(resultSet.getInt(replace[i]));

            }else if (map.get(replace[i]) =="DATETIME")

    replace[i] =resultSet.getString(replace[i]);

        }

    csvPrinter.printRecord(replace);

        System.out.println("导出一条数据");

    }

    //碰到一个大坑,记录一下

    在while(resultset.next){

    }中,应该将数组新建在循环内部,要不然只会得到第一条数据

    相关文章

      网友评论

          本文标题:导出csv文件

          本文链接:https://www.haomeiwen.com/subject/qgrhkctx.html