2

嗨,我试图跟踪我的 Apache POI 读取 excel 文件并导入数据库。我将导入进度(% 进度、时间等)保存到数据库中的单独表中,以便我可以查询数据导入进度。

我的问题是实体管理器只保留一次“进度”状态,那是在将数据加载到数据库中的方法的末尾。

爪哇

    @Inject
        private EntityManager em;

    public void importTheData(String path){

        try 
        {

            FileInputStream file = new FileInputStream(path);
            wb = WorkbookFactory.create(file);
        } catch (Exception ex) {}   

        Sheet sheet = wb.getSheetAt(0);

        for (int i = 1; i <= sheet.getLastRowNum(); i++) {

            try {
                row = sheet.getRow(i);

                Table theTable = new Table();
                theTable.setDate(row.getCell(0).getDateCellValue());
    theTable.setDate1(row.getCell(1).getDateCellValue());
    theTable.setDate2(row.getCell(2).getDateCellValue());

    bdt.add(theTable);

}

public void importtheTable() {

    for(int i=0; i<bdt.size();i++)
    {

        em.persist(bdt.get(i));

        if(i%2000 == 0){
            em.flush();
            em.clear();
        }
    }

    }

方法 setProgress(path,(100* i/theTable.getLastRowNum())) 尝试将进度状态保存到单独的表中,但这只会发生一次(最后)

有人可以帮帮我吗?

谢谢

4

2 回答 2

3

这取决于事务的范围,您是否使用注释来定义它?如果是,这就解释了为什么最后一切都完成了。

如果您需要,您将需要在此方法中开始/结束事务。

于 2013-04-12T20:36:54.623 回答
1

这取决于您创建的 entityManger。

如果你有像 entityManager.gettransaction.commit() 这样的循环编写代码,那么你可以在数据库中获取更新。

但是如果你在循环之后完成了它,那么它将一次全部提交。

您在方法上指定的交易类型也很重要。

于 2013-04-15T14:22:19.420 回答