Search in sources :

Example 1 with ResultSetDataCache

use of com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache in project cubrid-manager by CUBRID.

the class ExprotToSqlHandler method exportFromCache.

public void exportFromCache(String tableName) throws IOException {
    if (StringUtil.isEmpty(tableName)) {
        return;
    }
    BufferedWriter fs = null;
    int exportedCount = 0;
    ResultSetDataCache resultSetDataCache = exportConfig.getResultSetDataCache();
    try {
        fs = FileUtil.getBufferedWriter(exportConfig.getDataFilePath(tableName), exportConfig.getFileCharset());
        try {
            List<ColumnInfo> columnInfos = resultSetDataCache.getColumnInfos();
            int colCount = columnInfos.size();
            StringBuffer insert = new StringBuffer("INSERT INTO ");
            insert.append(QuerySyntax.escapeKeyword(tableName));
            insert.append(" (");
            for (int i = 0; i < colCount; i++) {
                if (i > 0) {
                    insert.append(", ");
                }
                insert.append(QuerySyntax.escapeKeyword(columnInfos.get(i).getName()));
            }
            insert.append(") ");
            List<ArrayList<Object>> datas = resultSetDataCache.getDatas();
            for (ArrayList<Object> rowData : datas) {
                StringBuffer values = new StringBuffer("VALUES (");
                for (int j = 0; j < colCount; j++) {
                    if (j > 0) {
                        values.append(", ");
                    }
                    int precision = columnInfos.get(j).getPrecision();
                    String columnType = columnInfos.get(j).getType();
                    setIsHasBigValue(columnType, precision);
                    Object value = rowData.get(j);
                    if (DataType.DATATYPE_BLOB.equals(columnType) || DataType.DATATYPE_CLOB.equals(columnType)) {
                        value = DataType.VALUE_NULL;
                    }
                    values.append(value.toString());
                }
                values.append(");\n");
                fs.write(insert.toString());
                fs.write(values.toString());
                exportedCount++;
                if (exportedCount >= COMMIT_LINES) {
                    fs.flush();
                    exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
                    exportedCount = 0;
                }
                if (stop) {
                    break;
                }
            }
            exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
            exportedCount = 0;
        } catch (Exception e) {
            LOGGER.error(e.getMessage(), e);
            exportDataEventHandler.handleEvent(new ExportDataFailedOneTableEvent(tableName));
        }
        System.gc();
    } finally {
        FileUtil.close(fs);
    }
}
Also used : ArrayList(java.util.ArrayList) ColumnInfo(com.cubrid.common.ui.query.control.ColumnInfo) IOException(java.io.IOException) SQLException(java.sql.SQLException) BufferedWriter(java.io.BufferedWriter) ExportDataFailedOneTableEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent) ExportDataSuccessEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent) ResultSetDataCache(com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache)

Example 2 with ResultSetDataCache

use of com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache in project cubrid-manager by CUBRID.

the class ExportToTxtHandler method exportFromCache.

public void exportFromCache(String tableName) throws IOException {
    BufferedWriter fs = null;
    int exportedCount = 0;
    ResultSetDataCache resultSetDataCache = exportConfig.getResultSetDataCache();
    try {
        fs = FileUtil.getBufferedWriter(exportConfig.getDataFilePath(tableName), exportConfig.getFileCharset());
        try {
            List<ColumnInfo> columnInfos = resultSetDataCache.getColumnInfos();
            int colCount = columnInfos.size();
            for (int j = 0; j < colCount; j++) {
                fs.write(surround + columnInfos.get(j).getName() + surround);
                if (j != colCount - 1) {
                    fs.write(columnSeprator);
                }
            }
            fs.write(rowSeprator);
            fs.flush();
            List<ArrayList<Object>> datas = resultSetDataCache.getDatas();
            for (ArrayList<Object> rowData : datas) {
                writeNextLine(tableName, fs, columnInfos, rowData, columnSeprator, rowSeprator, surround);
                fs.write(rowSeprator);
                exportedCount++;
                if (exportedCount >= COMMIT_LINES) {
                    fs.flush();
                    exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
                    exportedCount = 0;
                }
                if (stop) {
                    break;
                }
            }
            exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
            exportedCount = 0;
        } catch (Exception e) {
            LOGGER.error("", e);
            exportDataEventHandler.handleEvent(new ExportDataFailedOneTableEvent(tableName));
        }
        System.gc();
    } finally {
        Closer.close(fs);
    }
}
Also used : ExportDataFailedOneTableEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent) ExportDataSuccessEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent) ArrayList(java.util.ArrayList) ColumnInfo(com.cubrid.common.ui.query.control.ColumnInfo) ResultSetDataCache(com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache) SQLException(java.sql.SQLException) IOException(java.io.IOException) BufferedWriter(java.io.BufferedWriter)

Example 3 with ResultSetDataCache

use of com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache in project cubrid-manager by CUBRID.

the class ExportToXlsHandler method exportFromCache.

public void exportFromCache(String tableName) throws IOException {
    if (StringUtil.isEmpty(tableName)) {
        // FIXME move this logic to core module
        return;
    }
    WritableWorkbook workbook = null;
    int workbookNum = 0;
    int cellCharacterLimit = ImportFileConstants.XLSX_CELL_CHAR_LIMIT;
    // 65536: limit xls row number.
    int rowLimit = ImportFileConstants.XLS_ROW_LIMIT;
    boolean isInitedColumnTitles = false;
    List<String> columnTitles = new ArrayList<String>();
    try {
        int sheetNum = 0;
        int xlsRecordNum = 0;
        workbook = createWorkbook(exportConfig.getDataFilePath(tableName), workbookNum++);
        WritableSheet sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
        sheetNum++;
        int exportedCount = 0;
        try {
            ResultSetDataCache resultSetDataCache = exportConfig.getResultSetDataCache();
            List<ArrayList<Object>> datas = resultSetDataCache.getDatas();
            List<ColumnInfo> columnInfos = resultSetDataCache.getColumnInfos();
            int colCount = columnInfos.size();
            if (!isInitedColumnTitles) {
                isInitedColumnTitles = true;
                for (ColumnInfo column : columnInfos) {
                    columnTitles.add(column.getName());
                }
                if (isExit) {
                    return;
                }
                // first line add column name
                if (exportConfig.isFirstRowAsColumnName()) {
                    writeHeader(sheet, columnTitles);
                    xlsRecordNum++;
                }
            }
            for (ArrayList<Object> rowData : datas) {
                //Check memory
                if (!CommonUITool.isAvailableMemory(REMAINING_MEMORY_SIZE)) {
                    closeWorkbook(workbook);
                    workbook = null;
                    System.gc();
                    workbook = createWorkbook(exportConfig.getDataFilePath(tableName), workbookNum++);
                    sheetNum = 0;
                    sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
                    sheetNum++;
                    xlsRecordNum = 0;
                    // first line add column name
                    if (exportConfig.isFirstRowAsColumnName()) {
                        writeHeader(sheet, columnTitles);
                        xlsRecordNum++;
                    }
                }
                for (int j = 1; j <= colCount; j++) {
                    String colType = columnInfos.get(j - 1).getType();
                    int precision = columnInfos.get(j - 1).getPrecision();
                    setIsHasBigValue(colType, precision);
                    Object cellValue = rowData.get(j - 1);
                    // We need judge the CLOB/BLOD data by column type
                    if (DataType.DATATYPE_BLOB.equals(colType) || DataType.DATATYPE_CLOB.equals(colType)) {
                        if (DataType.DATATYPE_BLOB.equals(colType)) {
                            String fileName = exportBlobData(tableName, (Blob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + BLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                        } else {
                            String fileName = exportClobData(tableName, (Clob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + CLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                        }
                    } else if (cellValue instanceof Long) {
                        sheet.addCell(new Number(j - 1, xlsRecordNum, (Long) cellValue));
                    } else if (cellValue instanceof Double) {
                        sheet.addCell(new Number(j - 1, xlsRecordNum, (Double) cellValue));
                    } else if (cellValue instanceof Timestamp) {
                        String dataCellValue = FieldHandlerUtils.formatDateTime((Timestamp) cellValue);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else if (cellValue instanceof java.sql.Time) {
                        String dataCellValue = DateUtil.getDatetimeString(((java.sql.Time) cellValue).getTime(), FieldHandlerUtils.FORMAT_TIME);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else if (cellValue instanceof java.sql.Date) {
                        String dataCellValue = DateUtil.getDatetimeString(((java.sql.Date) cellValue).getTime(), FieldHandlerUtils.FORMAT_DATE);
                        sheet.addCell(new Label(j - 1, xlsRecordNum, dataCellValue));
                    } else {
                        sheet.addCell(new Label(j - 1, xlsRecordNum, cellValue.toString().length() > cellCharacterLimit ? cellValue.toString().substring(0, cellCharacterLimit) : cellValue.toString()));
                    }
                }
                xlsRecordNum++;
                if ((xlsRecordNum + 1) % rowLimit == 0) {
                    xlsRecordNum = 0;
                    sheet = workbook.createSheet("Sheet " + sheetNum, sheetNum);
                    sheetNum++;
                    // first line add column name
                    if (exportConfig.isFirstRowAsColumnName()) {
                        writeHeader(sheet, columnTitles);
                        xlsRecordNum++;
                    }
                }
                exportedCount++;
                if (exportedCount >= COMMIT_LINES) {
                    exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
                    exportedCount = 0;
                }
                if (stop) {
                    break;
                }
            }
            exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
            exportedCount = 0;
        } catch (Exception e) {
            LOGGER.error("", e);
            exportDataEventHandler.handleEvent(new ExportDataFailedOneTableEvent(tableName));
        }
        System.gc();
    } catch (Exception e) {
        LOGGER.error("", e);
    } finally {
        closeWorkbook(workbook);
    }
}
Also used : ArrayList(java.util.ArrayList) Label(jxl.write.Label) ColumnInfo(com.cubrid.common.ui.query.control.ColumnInfo) Timestamp(java.sql.Timestamp) ExportDataFailedOneTableEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent) Number(jxl.write.Number) ResultSetDataCache(com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache) WritableSheet(jxl.write.WritableSheet) WriteException(jxl.write.WriteException) SQLException(java.sql.SQLException) IOException(java.io.IOException) RowsExceededException(jxl.write.biff.RowsExceededException) WritableWorkbook(jxl.write.WritableWorkbook) ExportDataSuccessEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent)

Example 4 with ResultSetDataCache

use of com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache in project cubrid-manager by CUBRID.

the class ExportToXlsxHandler method exportFromCache.

public void exportFromCache(String tableName) throws IOException {
    if (StringUtil.isEmpty(tableName)) {
        return;
    }
    // 1048576: limit xlsx row number.
    int rowLimit = ImportFileConstants.XLSX_ROW_LIMIT;
    // 16384: limit xlsx column number.
    int columnLimit = ImportFileConstants.XLSX_COLUMN_LIMIT;
    int cellCharacterLimit = ImportFileConstants.XLSX_CELL_CHAR_LIMIT;
    XlsxWriterHelper xlsxWriterhelper = new XlsxWriterHelper();
    //create memory workbook
    XSSFWorkbook workbook = new XSSFWorkbook();
    Calendar cal = Calendar.getInstance();
    int datetimeStyleIndex = ((XSSFCellStyle) xlsxWriterhelper.getStyles(workbook).get("datetime")).getIndex();
    int timestampStyleIndex = ((XSSFCellStyle) xlsxWriterhelper.getStyles(workbook).get("timestamp")).getIndex();
    int dateStyleIndex = ((XSSFCellStyle) xlsxWriterhelper.getStyles(workbook).get("date")).getIndex();
    int timeStyleIndex = ((XSSFCellStyle) xlsxWriterhelper.getStyles(workbook).get("time")).getIndex();
    int sheetNum = 0;
    int xssfRowNum = 0;
    File file = new File(exportConfig.getDataFilePath(tableName));
    Map<String, File> fileMap = new HashMap<String, File>();
    XlsxWriterHelper.SpreadsheetWriter sheetWriter = null;
    boolean isInitedColumnTitle = false;
    List<String> columnTitles = new ArrayList<String>();
    try {
        int exportedCount = 0;
        ResultSetDataCache resultSetDataCache = exportConfig.getResultSetDataCache();
        List<ColumnInfo> columnInfos = resultSetDataCache.getColumnInfos();
        List<ArrayList<Object>> datas = resultSetDataCache.getDatas();
        int colCount = columnInfos.size();
        if (colCount >= columnLimit && !isConfirmColumnLimit) {
            isConfirmColumnLimit = true;
            Display.getDefault().syncExec(new Runnable() {

                public void run() {
                    if (!CommonUITool.openConfirmBox(Messages.exportColumnCountOverWarnInfo)) {
                        isExit = true;
                    }
                }
            });
            if (isExit) {
                return;
            }
            colCount = columnLimit;
        }
        if (!isInitedColumnTitle) {
            for (ColumnInfo column : columnInfos) {
                columnTitles.add(column.getName());
            }
            isInitedColumnTitle = true;
            if (isExit) {
                return;
            }
            sheetWriter = createSheetWriter(workbook, xlsxWriterhelper, sheetNum++, fileMap, columnTitles, xssfRowNum);
            if (exportConfig.isFirstRowAsColumnName()) {
                xssfRowNum++;
            }
        }
        try {
            for (ArrayList<Object> rowData : datas) {
                sheetWriter.insertRow(xssfRowNum);
                for (int k = 1; k <= colCount; k++) {
                    String colType = columnInfos.get(k - 1).getType();
                    int precision = columnInfos.get(k - 1).getPrecision();
                    setIsHasBigValue(colType, precision);
                    Object cellValue = rowData.get(k - 1);
                    // We need judge the CLOB/BLOD data by column type
                    if (DataType.DATATYPE_BLOB.equals(colType) || DataType.DATATYPE_CLOB.equals(colType)) {
                        if (DataType.DATATYPE_BLOB.equals(colType)) {
                            String fileName = exportBlobData(tableName, (Blob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + BLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheetWriter.createCell(k - 1, dataCellValue);
                        } else {
                            String fileName = exportClobData(tableName, (Clob) cellValue);
                            String dataCellValue = DataType.NULL_EXPORT_FORMAT;
                            if (StringUtil.isNotEmpty(fileName)) {
                                dataCellValue = DBAttrTypeFormatter.FILE_URL_PREFIX + tableName + CLOB_FOLDER_POSTFIX + File.separator + fileName;
                            }
                            sheetWriter.createCell(k - 1, dataCellValue);
                        }
                    } else if (cellValue instanceof Long) {
                        sheetWriter.createCell(k - 1, ((Long) cellValue).longValue());
                    } else if (cellValue instanceof Double) {
                        sheetWriter.createCell(k - 1, ((Double) cellValue).doubleValue());
                    } else if (cellValue instanceof Date) {
                        cal.setTime((Date) cellValue);
                        if (DataType.DATATYPE_DATETIME.equals(colType)) {
                            sheetWriter.createCell(k - 1, cal, datetimeStyleIndex);
                        } else if (DataType.DATATYPE_DATE.equals(colType)) {
                            sheetWriter.createCell(k - 1, cal, dateStyleIndex);
                        } else if (DataType.DATATYPE_TIME.equals(colType)) {
                            sheetWriter.createCell(k - 1, cal, timeStyleIndex);
                        } else {
                            sheetWriter.createCell(k - 1, cal, timestampStyleIndex);
                        }
                    } else {
                        String cellStr = cellValue.toString().length() > cellCharacterLimit ? cellValue.toString().substring(0, cellCharacterLimit) : cellValue.toString();
                        sheetWriter.createCell(k - 1, Export.covertXMLString(cellStr));
                    }
                }
                sheetWriter.endRow();
                xssfRowNum++;
                exportedCount++;
                if ((xssfRowNum + 1) % rowLimit == 0) {
                    xssfRowNum = 0;
                    if (sheetWriter != null) {
                        try {
                            XlsxWriterHelper.writeSheetWriter(sheetWriter);
                        } catch (IOException e) {
                            sheetWriter = null;
                            throw e;
                        }
                    }
                    sheetWriter = createSheetWriter(workbook, xlsxWriterhelper, sheetNum, fileMap, columnTitles, xssfRowNum);
                    sheetNum++;
                    if (exportConfig.isFirstRowAsColumnName()) {
                        xssfRowNum++;
                    }
                }
                if (exportedCount >= COMMIT_LINES) {
                    exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
                    exportedCount = 0;
                }
                if (stop) {
                    break;
                }
            }
            exportDataEventHandler.handleEvent(new ExportDataSuccessEvent(tableName, exportedCount));
            exportedCount = 0;
        } catch (Exception e) {
            LOGGER.error("", e);
            exportDataEventHandler.handleEvent(new ExportDataFailedOneTableEvent(tableName));
        }
        System.gc();
    } finally {
        try {
            if (sheetWriter != null) {
                XlsxWriterHelper.writeSheetWriter(sheetWriter);
            }
        } catch (IOException e) {
            sheetWriter = null;
            throw e;
        } finally {
            XlsxWriterHelper.writeWorkbook(workbook, xlsxWriterhelper, fileMap, file);
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ColumnInfo(com.cubrid.common.ui.query.control.ColumnInfo) XlsxWriterHelper(com.cubrid.common.ui.cubrid.table.control.XlsxWriterHelper) XSSFCellStyle(org.apache.poi.xssf.usermodel.XSSFCellStyle) ExportDataFailedOneTableEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent) XSSFWorkbook(org.apache.poi.xssf.usermodel.XSSFWorkbook) ResultSetDataCache(com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache) Calendar(java.util.Calendar) IOException(java.io.IOException) Date(java.util.Date) SQLException(java.sql.SQLException) IOException(java.io.IOException) ExportDataSuccessEvent(com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent) File(java.io.File)

Aggregations

ExportDataFailedOneTableEvent (com.cubrid.common.ui.cubrid.table.event.ExportDataFailedOneTableEvent)4 ExportDataSuccessEvent (com.cubrid.common.ui.cubrid.table.event.ExportDataSuccessEvent)4 ResultSetDataCache (com.cubrid.common.ui.cubrid.table.export.ResultSetDataCache)4 ColumnInfo (com.cubrid.common.ui.query.control.ColumnInfo)4 IOException (java.io.IOException)4 SQLException (java.sql.SQLException)4 ArrayList (java.util.ArrayList)4 BufferedWriter (java.io.BufferedWriter)2 XlsxWriterHelper (com.cubrid.common.ui.cubrid.table.control.XlsxWriterHelper)1 File (java.io.File)1 Timestamp (java.sql.Timestamp)1 Calendar (java.util.Calendar)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 Label (jxl.write.Label)1 Number (jxl.write.Number)1 WritableSheet (jxl.write.WritableSheet)1 WritableWorkbook (jxl.write.WritableWorkbook)1 WriteException (jxl.write.WriteException)1 RowsExceededException (jxl.write.biff.RowsExceededException)1