使用java将数据从excelfile upload到数据库

我需要使用java将excel工作表中的数据上传到数据库。

数据库将是oracle。

用户使用一个Web应用程序(Spring MVC前端),Excel表单将在一个月内上传一次。

Excel表格将有成千上万的logging/行,例如大约15000或更多。

  1. 在数据库中上传这些庞大数据的最快方法是什么? 我们正在使用简单的JDBC(Spring的JDBC模板)。
  2. 我们如何处理交易logging错误,因为上传数据时可能会出现错误,在这种情况下,部分上传的数据将无用?
  3. 我们需要能够通知用户错误,以便他可以纠正Excel表格,然后再试一次?

请帮忙/

您可以使用Apache POI(用于Microsoft Documents的Java API来处理文件),然后使用普通JDBC将数据插入到数据库中。

这将是相当快的,你可以捕捉所有的例外,以提醒用户有关错误。

你用什么oracle版本? 如果你只需要一个Web应用程序的使用情况,也许APEX可以使它成为你的朋友。 从Oracle 11g开始,它将与数据库一起预装,从9i开始,您可以自行安装它。 它带来了excel的非常好的集成,因此即使是初学者也可以在几天内创build一个应用程序。

至于第一个问题,我认为最好的解决scheme是转换.csv格式的excel文件(逗号分隔值),这是非常简单的parsing。 我不确定可以帮忙,但是我find了这个链接 。

对于exception处理,看一下@ExceptionHandler注释,可能可以帮助你。

写入磁盘并从Oracle进行批量导入。 分析错误并将其返回给用户。

您可以使用免费的jExcelAPI或Apache POI ,或者您可以为Aspose单元付费,如果您在为一家公司工作,那么这些单元的价格并不昂贵。

这些都可以是非常有用的。 例如,可以使用库来查找错误,然后转换为CSV,最后使用JDBC将其插入到数据库中。

如果你的excel表单像你说的那样大,那么请注意不要同时把所有内容加载到内存中,否则你可能会用完堆空间。 在整个过程中收集垃圾。

数据表中每条logging有多less列,每个单元中的数据有多大? 在使用Apache POI转换为Java对象之后,您可以计算内存消耗以查看它是否适合您的堆。

然后你可以启动一个试图插入数据的数据库事务。 如果出现任何错误,交易将被回滚,您可以在表单中input错误的数据以供用户更正。

笏你应该做的是,

1)使用Apache POI for Microsoft excel文件转换为XML。 它让你的办公室openXML格式。 一旦你得到它。 将其存储在文件系统中。 2)其次提供一个链接到用户导入3)一旦他点击导入,你开始石英工作。 由于您使用的是http://static.springsource.org/spring/docs/1.2.x/reference/scheduling.html

4)在你的工作类中开始你的XML提取,然后开始一个transcation(Hibernate)。 每次之后

春季开始新的交易。

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setName("ImportFileTransaction"); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = txManager.getTransaction(def); 

每次提交后

 txManager.commit(status); status = txManager.getTransaction(def); 

获取交易状态并插入

5)通知用户维护错误xml,以便行中有一个错误插入该XML。

请享用!!!!

我也做了你所要求的同样的事情。 我做了以下步骤

  1. 保存的文件@服务器。
  2. 使用POI jar,因为它支持最大的xlsfunction
  3. 根据表结构创build一个java类
  4. 在setter方法中应用validation,在将数据设置到types集合(创build的类别)时检查值,用相对代码来追踪exception处理exception和定制消息(显示用户结束)。
  5. 一旦所有的logging被validation,然后点击数据库来validation第二级别,例如获得任何给定名称的ID。 再次使用错误代码处理exception。
  6. 使插入查询模板插入数据到数据库尝试使用准备的语句,因为它是一点点安全的SQL注入。
  7. 好的方法是使用hibernate或任何其他的持久性服务,因为它安全和事务pipe理,或为JDBC使用批量查询提交最后如果一切正常,否则简单地回滚事务

如果logging非常大(15000不是那么大),那么把你的作业分成不同的批次,并通过线程控制。