2012-02-05 204 views
5

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

数据库将是oracle。

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

excel工作表将包含数千个记录/行,例如大约15000或更多。

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

请帮帮忙/

+0

在Java中是否有任何第三方工具或apis将加速上传过程。请记住,这是一个基于Web的应用程序。因此,无论哪种工具都应该易于集成到网络应用程序中。 – ashishjmeshram 2012-02-07 13:55:40

回答

0

至于第一个问题,我认为最好的办法是到Excel文件转换为.csv格式(逗号分隔值),这是非常简单的解析。我不确定可以提供帮助,但是我发现这是link

对于异常处理,看看@ExceptionHandler注释可能可以帮助你。

+0

感谢您的回答。但是,这是最快的方式吗?我如何通知用户errros,以便他们可以更正错误并再次上传excel? – ashishjmeshram 2012-02-07 05:05:22

0

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

1

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

0

您可以使用jExcelAPIApache POI这是免费的,或者你可以支付Aspose cells如果你工作的公司是不贵。

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

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

0

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

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

0

笏正是你应该做的是,

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

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

在春季开始新的交易。

DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
def.setName("ImportFileTransaction"); 
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); 

TransactionStatus status = txManager.getTransaction(def); 

后每次提交

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

获取交易状态和cntinue插入

5)就向用户通知保持错误的XML,以使行THT具有被插入在该XML中的错误。

Enjoy !!!!

0

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

  1. 保存文件@服务器。
  2. 使用POI罐子,因为它支持最大XLS功能
  3. 创建一个Java类按表结构
  4. 应用于setter方法的验证,将设置数据到类型的收集过程中的校验值(创建什么课),通过相对代码来追踪异常处理异常和自定义消息(显示用户结束)。
  5. 一旦所有记录都被验证,然后点击数据库来验证第二级,例如,获取任何给定名称的ID。再次使用错误代码处理异常。
  6. 创建插入查询模板以将数据插入数据库尝试使用预准备语句,因为它对于SQL注入来说有点安全。
  7. 好方法是使用休眠或任何其他持久性服务,因为它的安全性和事务管理,或者用于JDBC使用批量查询,最终提交如果所有的事情精细否则根本回滚事务

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

相关问题