java讀取分片msyql資料到csv檔案中
阿新 • • 發佈:2019-02-05
java讀取分片msyql資料到csv檔案當中
public class demoTest { @Test public void testDemo1() { ApplicationContext context = new ClassPathXmlApplicationContext("conf/**/*Context*.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); //獲取數量 String sqlCount = "select count(1) from payment_plat_instant_ts"; int count = getCount(sqlCount, jdbcTemplate); //寫入檔案 String sql = "select ts_id,ts_seq,serv_id from payment_plat_instant_ts limit " + String.valueOf(count); String csvPath = "E:\\123.csv"; readWriteResultSetTOCsv(sql, csvPath, jdbcTemplate); } public void readWriteResultSetTOCsv(String query, String csvPath, JdbcTemplate jdbcTemplate) { ResultSet rs = null; try { rs = getRs(query, jdbcTemplate); List<List<String>> rows = new ArrayList<>(); List<String> header = getColHeaderFromRS(rs); while (rs.next()) { List<String> row = new ArrayList<>(); for (String h : header) { row.add(rs.getString(h)); } rows.add(row); if (rows.size() >= 2000) { exportCsv(csvPath, rows); rows.clear(); } } if (!rows.isEmpty()) { exportCsv(csvPath, rows); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } } private int getCount(String query, JdbcTemplate jdbcTemplate) { ResultSet rs = null; int count = 0; try { rs = getRs(query, jdbcTemplate); if (rs.next()) { count = rs.getInt(1); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } return count; } private ResultSet getRs(String query, JdbcTemplate jdbcTemplate) throws Exception { java.sql.Connection con = jdbcTemplate.getDataSource().getConnection(); java.sql.Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(5000); ResultSet rs = stmt.executeQuery(query); return rs; } private List<String> getColHeaderFromRS(ResultSet rs) throws Exception { ResultSetMetaData data = rs.getMetaData(); List<String> list = new ArrayList<>(); for (int i = 1; i <= data.getColumnCount(); i++) { list.add(data.getColumnName(i)); } return list; } private boolean exportCsv(String csvPath, List<List<String>> dataList) { boolean isSucess=false; try { BufferedWriter out =new BufferedWriter(new FileWriter(new File(csvPath),true)); for(List<String> list:dataList){ for (String data:list){ out.write(data); out.write(","); } out.newLine(); } out.flush(); out.close(); isSucess=true; }catch (Exception e){ e.printStackTrace(); isSucess=false; } return isSucess; } }