Экспорт больших данных из базы данных в Excel с использованием набора результатов - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно экспортировать результат набора результатов в лист Excel, используя Java. Resultset содержит таблицу с тысячами строк и несколькими столбцами. Если кто-то может предоставить пример кода, который будет очень полезен, так как я застрял с этой проблемой. Ниже приведен пример кода, который я использую для достижения этой цели, но каким-то образом не могу получить правильные данные в файле Excel: -

SSFWorkbook workbook = new XSSFWorkbook();
    try {
    setConnection(appDB);

    String queryName="SELECT * FROM ALL_TABLES where table_name='table_name'";

    Reporter.addStepLog("----------------------------------- " + queryName.toUpperCase()
            + "\n - Validation Start" + " -----------------------------------");
    ps = con.prepareStatement(queryName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    rs = ps.executeQuery();

    Statement statement = con.createStatement();
    XSSFSheet spreadsheet = workbook.createSheet("employedb");
      ResultSet resultSet = statement.executeQuery("select * from all_tab_columns where table_name='table_name'"); 
      XSSFRow row = spreadsheet.createRow(0);
      XSSFCell cell;
      int cc=resultSet.getMetaData().getColumnCount();
      for(int i=1;i<=cc;i++)
      {
          String headerVal=resultSet.getMetaData().getColumnName(i);
          headerValues.add(headerVal);
          cell = row.createCell(i-1);
          cell.setCellValue(resultSet.getMetaData().getColumnName(i));
      }
      System.out.println(headerValues);
      int i = 1;
      while (resultSet.next())
      {  
          for(int j=1;j<=cc;j++)
          {  
          System.out.println(resultSet.getString(j));
          XSSFRow row1 = spreadsheet.createRow((short) i);
          row1.createCell((short) i).setCellValue(resultSet.getString(resultSet.getMetaData().getColumnName(j)));
          i++;

      }  
      }

      FileOutputStream out = new FileOutputStream(new File("S:\\Downloads\\excel.xlsx"));
      workbook.write(out);
      out.close();  
      System.out.println("exceldatabase.xlsx written successfully");

}catch(Exception e){}
}

Пожалуйста, дайте мне знать, если вопрос не ясен, так как я новичок в этом форуме.

Ответы [ 3 ]

0 голосов
/ 21 мая 2019
    List<Double> resultList = new ArrayList();
    resultList.add(250.0);
    resultList.add(300.5);
    resultList.add(500.9);


public void setResultsToSheet(List results) throws Exception {
    WorkBook workBook = new WorkBook();
    int row = 0; //index of first row is 0
    for (int i = 0; i < results.size(); i++) {
        double result = (double) results.get(i);
        workBook.setNumber(row, 1, result);
        row++;
    }
    workBook.write("X\\yourDestination\\excel.xlsx");
}

Надеюсь, что в любом случае тебе это поможет.

0 голосов
/ 02 июля 2019

Вы можете попробовать использовать MemPOI . Взгляните:

File file = new File("S:\\Downloads\\excel.xlsx")

PreparedStatement prepStmt = this.connection.prepareStatement("SELECT * FROM ALL_TABLES where table_name='table_name'");
new MempoiBuilder()
                .setFile(file)
                .addMempoiSheet(new MempoiSheet(prepStmt, "employedb"))
                .build()
                .prepareMempoiReportToFile()
                .get();

Вы можете легко добавить шаблон. Взгляните на документ

0 голосов
/ 21 мая 2019

Мне вопрос не очень понятен.Вы хотите поместить расчетные данные в таблицу Excel?или вы хотите получить расчетные данные из таблицы Excel?

Я понял, что вы хотите поместить некоторые данные в таблицу.Таким образом, вы можете использовать несколько фреймворков для этого.Например, smartXLS или библиотека Apache POI

...