2013-04-09 90 views
0

我正在閱讀Excel文件並將其保存到數據庫。閱讀excel文件並保存到數據庫?

我遍歷每一行和單元格,並將其保存到矢量對象,然後使用循環,將其保存到數據庫。雖然我正在保存它的數據庫,我這樣做:

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

爲每列。除了這個我得到2.01356229E8作爲id的其他一切都很好。我不知道爲什麼我在我的id .. 2.01356229E8應該是這樣的201356229.

謝謝。

+0

爲什麼在將數據寫入數據庫之前將數字轉換爲字符串?你不應該將它們存儲爲一個數字嗎? – Gagravarr 2013-04-10 09:09:13

回答

0

這聽起來像是一個Excel顯示問題。 Excel不知道你希望這是一個整數。

您可能希望使其更寬(選擇整列,右鍵單擊,列寬...然後輸入10)。

您也可以選擇列,右鍵單擊格式單元格,選擇數字,將小數位數更改爲0)。

1

這不是Excel顯示問題,因爲該值已經通過Apache POI提取到Java中。但是,當XSSFCell#toString()被調用時,在Apache POI代碼使用以下表達式來使細胞與CELL_TYPE_NUMERIC類型轉換爲字符串在toString()

return getNumericCellValue() + ""; 

XSSFCell#getNumericCellValue()方法返回double,其當轉換爲一個字符串產生了串"2.01356229E8"。這是從doubleString的預期Java轉換,因爲"2.01356229E8"201356229的科學記數法表示。 (在數學中,表示2013562292.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();