//获取连接,自行替换为自己的
Connection conn = reqBean.getDataSyncExecInfo().getConn();
//sql 改为自己的
String sql = reqBean.getDataSyncExecInfo().getSql();
if ( null == conn|| null == sql){
throw new Exception("连接和sql不能为空");
}
ResultSet rs = null;
String file_name = UUID.randomUUID().toString() + ".csv";
BufferedWriter csvFileOutputStream = null;
File csvFile = null;
try {
//生成文件
csvFile = new File(file_name);
try {
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "utf-8"), 1024);;
} catch (Exception e) {
log.error("生成cvs文件异常", e);
throw new Exception("生成cvs文件异常");
}
log.info("文件路径:"+csvFile.getAbsolutePath());
StringBuilder sb = new StringBuilder();
Statement st = conn.createStatement();
rs = st.executeQuery(sql);
//获取元数据信息
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
Map<String,Object> row = null;
String columnName=null;
Object value=null;
List<String> valueList = new ArrayList<>();
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
columnName =metaData.getColumnLabel(i);
value = rs.getObject(columnName);
if(null != value) {
/**
* 目前使用object, TIMESTAMP 会丢失时分秒的精度
*/
if ("TIMESTAMP".equalsIgnoreCase(metaData.getColumnTypeName(i)) ){
value = rs .getTimestamp(columnName);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
value = format.format(value);
}
if ("DATE".equalsIgnoreCase(metaData.getColumnTypeName(i))) {
value = rs .getDate(columnName);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
value = format.format(value);
}
if ("DATETIME".equalsIgnoreCase(metaData.getColumnTypeName(i))) {
value = rs .getDate(columnName);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
value = format.format(value);
}
if ("null".equals(value)) {
value = "" ;
}
} else {
value = "" ;
}
valueList.add(String.valueOf(value));
}
sb.append(StringUtils.join(valueList,","));
log.info("row:"+sb.toString());
//将数据写入到 sb中, 逗号分隔
csvFileOutputStream.write(sb.toString());
csvFileOutputStream.newLine();
sb.delete(0,sb.length());
valueList.clear();
}
} catch (SQLException e) {
if(csvFile != null) {
csvFile.delete();
}
log.error("数据导出到文件异常,已删除该文件:"+csvFile.getAbsolutePath(),e);
throw e;
} finally {
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
if(csvFileOutputStream != null) {
try{
csvFileOutputStream.close();
} catch (IOException e){
log.error("同步导出到csv后,关闭流异常:",e);
}
}
}
java使用jdbc将数据库数据导出到csv文件
最新推荐文章于 2024-07-26 10:05:08 发布