Merhaba
Spring JDBC kullanımını kendi tarafımda gelistirmeye cailsiyorum ve her ne kadar internette bakınsamda istedigim bilgiyi bulamadım.
Elimde bir PL/SQL fonksiyonu var ve sys_refcursor donuyor. Bunu Java’da Spring JDBC kullanarak gerekli alanları alıp bir listenin icine atmak istiyorum.
Ornek ;
Araba objesi var ve bu objeye cursor’dan gelen degerleri atamak isteyecegim.
araba.setTekerlek(resultSet.get(“Tekerlek”));
araba.setRenk(resultSet.get(“Renk”));
vs.
Database tarafında 1 in 1 out parametre alıp 1 tane return’u bulunmaktadır.
sorgusu su az cok su sekildedir => { ? = call paket_araba.arabayi_olustur(gelen_araba_sayisi => ? , sayılan_araba_sayisi => ? ) };
Burada onemli olan donen sonuc. Donen sonucta birden fazla satırda veri donecek , donecek sorgunun yapısı su sekilde olabilir ; select * from araba
Simdiden tesekkurler
Biraz karisik olmus olabilir belki ama cok sey aciklamaya calistim :).
Selam,
Spring üzerinden stored procedure/function/package çağırılması nedense bana biraz karışık ve gereksiz geliyor 🙂 Onun yerine direk CallableStatement daha anlaşılır geliyor. Bu sorunun cevabı için aklıma takılan birkaç soru var.
Cursor döndürmenin amacı nedir? Birden fazla değer alma ihtiyacını anlıyorum. Ama sana gereken şey bir resultset midir, yoksa liste olarak değerleri alman yeterli mi?
Bu sorunun cevabına göre sana farklı tavsiyeler verebilirim. Şayet bana result gerekiyor, çok büyük veri alıyorum/işliyorum diyorsan spring’den çıkıp direk callable statement ile ya da parça parça alarak işlemeni tavsiye ederim. Buffer kayıtlar güzel olur. Onun için yapını/kodunu biraz daha geliştirmen gerekir.
Dönen sonucun şayet binlerce kayıt olmayacaksa, RowMapper diye bir olay var spring’de, onu kullanabilirsin. İki aşamada kullanman gerekiyor.
Tabi SeninRowMapper sınıfını da tanımlaman lazım. Onun için de SpringRowMapper örneklerine bakabilirsin.
Peki neden cursor kullanamazsın? Aslında kullanamayacağına kesin emin değilim. Ama spring connection ve statement işlemlerini kendisi yaptığı için sanıyorum sen cursor aldığında statement açık kalması gerekecek ve spring bunu kapatmak isteyecek orada bir sıkıntı yaşayabilirsin. Söylediğim gibi şayet binlerce kayıt üzerinde çalışmıyorsan rowmapper kullanıp güzelce halledebilirsin sanıyorum.
İyi çalışmalar.