0

大家早上好,

我必须解析几个“Excel”文件,例如 CSV、XLSX、XLS、ODS ......以便将它们的内容添加到数据库中。几天前我已经实施了一个解决方案,到目前为止它运行良好。实际上,我有一个带有抽象方法的抽象类,例如“插入表”、“创建表”或“准备查询”,这些方法在 daugthers 类(XLS、CSV ...)中实现,因为它们是特定于文件和您阅读它的方式。

然后我(几乎没有)尝试优化和分解代码。实际上,几乎每一行代码(在每个子类中)都是相同的,唯一不同的是读取文件的代码(如何获取单元格值或如何获取单元格类型......)。有了这些值,我只需要用我准备好的语句实例调用“set Object”方法。

这就是问题所在:我创建了一个抽象方法(setObjectStatement():见下文),该方法在子类中实现,以便读取特定文件并使用语句(在参数中)调用 setObject。它仍然有效,但它比以前长得多(代码冗余)。代码完全一样,我只是将它复制/粘贴到一个通用方法中。

我哪里错了?在大循环中调用方法有那么贵吗?我可以修复它还是必须处理代码冗余?

//Inserting in table (mother class) : 
for (int col=colonneDepart-1;col<colonneFin;col++,ligneJtable++) {
     //some conditions here which are independent from the file I read
     //...
     setStatementObject(statement,donnees,col,nRowIndex,nbrCol,ligneJtable);
     System.out.println(statement);
}
//Also some methods call which are the same for every files

这是我的女儿方法之一(用于 XLS)

//setStatementObject for XLS files (daugther class)
Cell cellDonnee = sheet.getCell(nColIndex,nRowIndex);
CellType type = cellDonnee.getType();
if (type == CellType.LABEL) {
   try {
       int x = Integer.parseInt(cellDonnee.getContents());
       statement.setObject(nObjectIndex,x);
    }
    catch(NumberFormatException e){
         String s = cellDonnee.getContents();
         if(s.equals("")){
        statement.setObject(nObjectIndex,0.0);
         }
         else {
            s = s.trim();
            statement.setObject(nObjectIndex,s);
        }
     }
  } else if ( ) {
        //...
  }

感谢您的回答,对于我的英语错误或您有一些问题需要理解我,我深表歉意。

4

0 回答 0