2013-04-09 9 views
0

Я читаю файл Excel и сохраняю его в базе данных.чтение файла excel и сохранение в базе данных?

Я повторяю каждую строку и ячейку и сохраняю ее в векторном объекте, а затем используя циклы, сохраняя ее в базе данных. В то время как я сохраняю его базу данных, я делаю это:

id = ((XSSFCell) cellStoreVector.get(0)).toString()==null?"":((XSSFCell) cellStoreVector.get(0)).toString(); 

для каждой колонки. Все остальное прекрасно, кроме этого, где я получаю 2.01356229E8 как id. Я не знаю, почему я получаю 2.01356229E8 в своем id..и должно быть как это 201356229.

Спасибо.

+0

Почему вы превращаете свои номера в строки, прежде чем записывать их в базу данных? Разве вы не должны хранить их как число вместо этого? – Gagravarr

ответ

0

Это звучит как проблема с отображением Excel. Excel не знает, что вы хотите, чтобы это целое число.

Возможно, вы захотите сделать это более широким (выберите весь столбец, щелкните правой кнопкой мыши, ширину столбца ... и введите 10).

Вы также можете выбрать столбец, щелкнуть правой кнопкой мыши, форматировать ячейки ..., выбрать номер, изменить десятичные разряды на 0).

1

Это не проблема отображения в Excel, потому что это значение уже было извлечено на Java с помощью Apache POI. Но когда XSSFCell#toString() называется, код Apache POI использует следующее выражение для преобразования ячейки с типом CELL_TYPE_NUMERIC в строку в toString():

return getNumericCellValue() + ""; 

Метод XSSFCell#getNumericCellValue() возвращает double, который при преобразовании в строку дает строку "2.01356229E8". Это ожидаемое преобразование Java от double до String, потому что "2.01356229E8" - это представление научной нотации для 201356229. (В математике представление 201356229 и 2.01356229E8 эквивалентны.)

Если столбец в базе данных Oracle, которые Вы сохраняете на это VARCHAR2, то вам нужно отформатировать строковое значение перед сохранением в базу данных , Это будет хранить "201356229" в id:

DecimalFormat df = new DecimalFormat("#"); 
id = df.format(((XSSFCell) cellStoreVector.get(0)).getNumericCellValue()); 

Если столбец является NUMBER, то не беспокойтесь, преобразовав его в строку первых, просто использовать числовое значение ячейки в качестве double передать в базу данных.

double numericId = ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue(); 

 Смежные вопросы

  • Нет связанных вопросов^_^