13 Ekim 2014 Pazartesi

PrimeFaces ile Excel'den Database'e Veri Aktarımı

Bu yazımda sizlere PrimeFaces fileUpload componentini kullanarak bir excel dosyasında ki verileri okuyup , okuduğumuz bu verileri JPA ile DB ye nasıl kaydedeceğimizi anlatacağım


Öncelikle bir excel dosyasını okumak için aşağıda ki linkden gerekli jarları indirip projeye eklemeniz gerekiyor.


Bu kütüphaneleri indirip projeye ekledikten sonra artık excel i parse etmeye başlayabiliriz.(Örnek bir excel dosyası yazının sonunda ekte bulunmakta)

private Vector read(String fileName) {
        Vector cellVectorHolder = new Vector();
        try {
            File file = new File(fileName);
            Workbook wb = WorkbookFactory.create(file);
            Sheet mySheet = wb.getSheetAt(0);
            Iterator<Row> rowIter = mySheet.rowIterator();
            while (rowIter.hasNext()) {
                   XSSFRow myRow = (XSSFRow) rowIter.next();
                   Iterator cellIter = myRow.cellIterator();
                   Vector cellStoreVector = new Vector();
                   while (cellIter.hasNext()) {
                          XSSFCell myCell = (XSSFCell) cellIter.next();
                          cellStoreVector.addElement(myCell);
                   }
                   cellVectorHolder.addElement(cellStoreVector);
                   file.delete();
             }
             } catch (Exception e) {
                    e.printStackTrace();
             }
        return cellVectorHolder;
}

Yukarıda ki  metod excelin içinde ki verileri Vector tipinde bir object şeklinde bize dönüyor.Ön yüzde bu component aşağıda ki gibi kullanılır.

<p:fileUpload  fileUploadListener="#{kitapKayitBean.handleFileUpload}"
       mode="advanced"/>

Artık handleFileUpload metodumuzu yazabiliriz

public void handleFileUpload(FileUploadEvent event) {
       Kitaplar kitapobj = new Kitaplar();
       List<Kitaplar> kitaplarList = new ArrayList<Kitaplar>();
       Vector dataHolder = read(path + event.getFile().getFileName());
       for (int i = 1; i < dataHolder.size(); i++) {
             Vector cellStoreVector = (Vector) dataHolder.elementAt(i);
       for (int j = 0; j < cellStoreVector.size(); j++) {
             XSSFCell myCell = (XSSFCell) cellStoreVector.elementAt(j);
             if (myCell.getColumnIndex() == 0) {                                                    kitapobj.setKitapID(Integer.parseInt(myCell.toString()
                                               .split("\\.")[0]));
             } else if (myCell.getColumnIndex() == 1) {
                                  kitapobj.setKitapad(myCell.toString());
             } else if (myCell.getColumnIndex() == 2) {
                                  kitapobj.setYazarad(myCell.toString());
             } else if (myCell.getColumnIndex() == 3) {
                                  kitapobj.setKitaptur(myCell.toString());
             } else {
                    kitapobj.setKitapdurum(myCell.toString());
             }
             if (kitapobj.getKitapID() != null
                && kitapobj.getKitapad() != null
                && kitapobj.getYazarad() != null
                && kitapobj.getKitaptur() != null
                && kitapobj.getKitapdurum() != null) {
                    kitaplarList.add(kitapobj);
                    kitapobj = new Kitaplar();
             }
                          
         }
    }
            
             for (int i = 0; i < kitaplarList.size(); i++) {
                    service.kitapKaydet(kitaplarList.get(i));
             }
            
}

Bu kodda kendinize göre ufak değişiklikler yaparak kullandığımız takdirde DB ye kayıt atabiliriz.

for (int i = 0; i < kitaplarList.size(); i++) {
       service.kitapKaydet(kitaplarList.get(i));
}

Bu kısımda daha önceki yazılarımda anlattığım gibi JPA ile kayıt atıyoruz.

Buradan bahsettiğim örnek excel dosyasını indirebilirsiniz.