java - 使用java从sqlserver将大数据导出到CSV

标签 java sql-server mongodb csv

我在sqlserver中有900万条记录。我正在尝试将其导入 csv 文件,以便我可以将该数据放入 mongo db 中。我已经为 sql2csv 导入编写了 Java 代码。但我有两个问题

  1. 如果我读取列表中的所有数据,然后尝试插入到 CSV 中,则会出现内存不足异常。
  2. 如果我逐行读取并尝试将每一行插入 CSV 中,则导出数据需要很长时间。

我的代码是这样的

 List list = new ArrayList();  
    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url, databaseUserName, databasePassword);
        stmt =  conn.prepareStatement("select  OptimisationId  from SubReports");
        result = null;

        result =   stmt.executeQuery(); 
        //  stmt.executeQuery("select * from Subscription_OptimisationReports");
        result.setFetchSize(1000);

        while (result.next()) {
            //System.out.println("Inside while");
            SubReportsBean bean = new SubReportsBean();
            bean.setOptimisationId(result.getLong(("OptimisationId")));

            list.add(bean);
             generateExcel(list);

        }
        //generateExcel(list);  
        conn.close();
    }

有没有一种更快的方法可以快速导出所有数据?或者如果可以直接导出到 mongo 而不是 csv 就更好了。

最佳答案

也许您应该使用 LIMIT 和 OFFSET 一次只读取一点数据来对数据进行分页。

select  OptimisationId  from SubReports OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY;
select  OptimisationId  from SubReports OFFSET 1000 ROWS FETCH NEXT 1000 ROWS ONLY;
select  OptimisationId  from SubReports OFFSET 2000 ROWS FETCH NEXT 1000 ROWS ONLY;
...

只需保留偏移量的计数器即可。

Another Example

如果您使用此解决方案,那么您需要修改代码以附加到 Excel 文件的末尾 - 不要将所有结果保留在内存中,否则您仍然会遇到 OutOfMemoryException。

关于java - 使用java从sqlserver将大数据导出到CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767029/

相关文章:

java - 找不到 ID 为 'gwt' 的插件

java - 要为我的网站制作一个体面到高质量的移动版本?

java - 将具有动态键的嵌套对象映射到 Java 对象

mongodb - 根据 MongoDB 中的属性更新嵌套数组对象

mongodb - 在nuxt中使用mongodb

java - 在 Java 中为 TCP 实现 3 次握手

SQL Insert into … ( SELECT *, SCOPE_IDENTITY() FROM …)

SQL查询按月比较产品销量

c# - 安全漏洞 list

mongodb - golang中如何根据查询字符串中输入的数据获取数据?