java读取分片msyql数据到csv文件中

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;
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值