阅读excel文件并保存到数据库?
问题描述:
我正在阅读Excel文件并将其保存到数据库。阅读excel文件并保存到数据库?
我遍历每一行和单元格,并将其保存到矢量对象,然后使用循环,将其保存到数据库。虽然我正在保存它的数据库,我这样做:
id = ((XSSFCell) cellStoreVector.get(0)).toString()==null?"":((XSSFCell) cellStoreVector.get(0)).toString();
为每列。除了这个我得到2.01356229E8作为id的其他一切都很好。我不知道为什么我在我的id .. 2.01356229E8应该是这样的201356229.
谢谢。
答
这听起来像是一个Excel显示问题。 Excel不知道你希望这是一个整数。
您可能希望使其更宽(选择整列,右键单击,列宽...然后输入10)。
您也可以选择列,右键单击格式单元格,选择数字,将小数位数更改为0)。
答
这不是Excel显示问题,因为该值已经通过Apache POI提取到Java中。但是,当XSSFCell#toString()
被调用时,在Apache POI代码使用以下表达式来使细胞与CELL_TYPE_NUMERIC
类型转换为字符串在toString()
:
return getNumericCellValue() + "";
的XSSFCell#getNumericCellValue()
方法返回double
,其当转换为一个字符串产生了串"2.01356229E8"
。这是从double
到String
的预期Java转换,因为"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();
为什么在将数据写入数据库之前将数字转换为字符串?你不应该将它们存储为一个数字吗? – Gagravarr 2013-04-10 09:09:13