导出csv文件

当接到业务需求为为每张表的内容导出到csv文件时,导出功能其实并不难做,这里可以参考Java导出CSV文件 - 废物大师兄 - 博客园。
问题是,当有大量的表需要导出时,对每张表起一个线程进行操作实际上是很复杂的,而且不具备很高的复用性,因此能将导出的方法再进行一次封装,使其具备更高的重用性是有必要的。


ResultSetMetaData resultSetMetaData =https://www.it610.com/article/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[i] = "";
}
//将字段名与字段类型相对应
Map map = new HashMap<>(); //这里的map是为了将字段名和字段类型做一个对应


for(int i = 0; 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 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文件】}中,应该将数组新建在循环内部,要不然只会得到第一条数据

    推荐阅读