При получении формы данных значение хранимой процедуры отображается как положено.Но при записи данных в CSV-файл с использованием сохранения значения Java в качестве экспоненциального значения как
Во время работы значение SP выглядит следующим образом: 1979903471947
Но в сгенерированномкак: 1.9799E + 12 (что-то в этом роде)
public void writeCsvFile(String fileName) { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("DTATA_FILE"); query.registerStoredProcedureParameter(O_ERRNO_IN, Integer.class, ParameterMode.OUT); query.registerStoredProcedureParameter(CURSOR, Class.class, ParameterMode.REF_CURSOR); query.execute(); List<Object[]> rows = query.getResultList(); try (FileWriter fileWriter = new FileWriter(fileName)) { fileWriter.append(FILE_HEADER); fileWriter.append(NEW_LINE_SEPARATOR); for (Object[] row : rows) { getFileWriter(fileWriter, row); } logger.info("CSV file was created successfully !!!"); } catch (Exception e) { logger.fatal("Error in CsvFileWriter !!!", e); } } private void getFileWriter(FileWriter fileWriter, Object[] row) throws IOException { for (int i = 0; i < row.length; i++) { fileWriter.append(String.valueOf(Objects.toString(row[i], ""))); fileWriter.append(COMMA_DELIMITER); } fileWriter.append(NEW_LINE_SEPARATOR); }
IN SP:
to_char(am.dti_number)
to_char является обязательным в хранимой процедуре.
to_char
Тот же результат, полученный при использовании toPlainString ()
private void getFileWriter(FileWriter fileWriter, Object[] row) throws IOException { for (int i = 0; i < row.length; i++) { if (i == 2) { BigDecimal bg; String str = row[i].toString(); String s; bg = new BigDecimal(str); s = bg.toPlainString(); fileWriter.write(s); fileWriter.append(COMMA_DELIMITER); } else { fileWriter.append(String.valueOf(Objects.toString(row[i], ""))); fileWriter.append(COMMA_DELIMITER); } } fileWriter.append(NEW_LINE_SEPARATOR); }
Отформатируйте число следующим образом:
NumberFormat nf = NumberFormat.getInstance(new Locale("en", "US")); String val = nf.format(n);
Вам может понадобиться настроить NumberFormat, чтобы получить то, что вы хотите.