我需要使用java将Excel工作表中的数据上传到数据库。
数据库将是oracle。
excel表将由用户使用Web应用程序(Spring MVC前端)在一个月内上传一次。
excel表将有数千条记录/行,例如约15000或更多。
请帮助/
答案 0 :(得分:1)
你使用的是哪个oracle版本?如果您只需要一个用于该用例的Web应用程序,也许APEX可以使它成为您的朋友。从Oracle 11g开始,它将与数据库一起预装,从9i开始,您可以自行安装。它带来了非常好的excel集成,因此即使是初学者也可以在几天内轻松创建应用程序。
答案 1 :(得分:1)
您可以使用Apache POI - the Java API for Microsoft Documents处理文件,然后使用纯JDBC将数据插入数据库。
它会相当快,您可以捕获所有异常以提醒用户有关错误。
答案 2 :(得分:0)
关于第一个问题,我认为最好的解决方案是将.csv格式的excel文件(逗号分隔值)转换为非常简单的解析。我不确定这可以提供帮助,但我发现了link。
对于异常处理,请查看可能对您有帮助的@ExceptionHandler注释。
答案 3 :(得分:0)
写入磁盘并从oracle进行批量导入。解析错误并将其返回给用户。
答案 4 :(得分:0)
您可以使用免费的jExcelAPI或Apache POI,或者您可以为Aspose cells付费,如果您在公司工作,这并不贵。
其中每一项都非常有用。例如,您可以使用库查找错误,然后转换为CSV,最后使用JDBC插入数据库。
如果您的Excel工作表很大,请注意不要同时将所有内容加载到内存中,否则可能会耗尽堆空间。在整个过程中收集垃圾。
答案 5 :(得分:0)
数据表中每条记录的列数以及每个单元格中的数据有多大?在使用Apache POI转换为Java对象之后,您可以计算内存消耗以查看它是否适合您的堆。
然后,您可以尝试插入数据来启动数据库事务。如果出现任何错误,交易将被回滚,您可以在工作表中提交错误的数据供用户更正。
答案 6 :(得分: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(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);
获取交易状态和cntinue插入
5)用于通知用户维护错误xml,以便在该xml中插入有错误的行。
享受!!!!
答案 7 :(得分:0)
我也做了同样的事情。 我做了以下步骤
如果记录非常大(15000不是那么大),那么将你的工作划分为不同的批次并通过线程控制它。