Netbeans’de Persistence Kullanımı ve önemli ipuçları


Java Netbeans Desktop Database App.
(Resim:1 Netbeans resmi sitesinden persistence uygulaması örneği)

Ücretsiz Java Program Geliştirme Ortamı olan Netbeans IDE’nin 6.0 ve üstü sürümlerinde masaüstü programlar için desteklediği Persistence teknolojisi sayesinde veritabanı programcılığının rahatlığının .NET ile boy ölçüşür düzeye geldiği bilinmektedir.
Ancak bu teknolojinin yeni olması itibari ile internette ingilizce kaynak bile bulmakta sıkıntı çekilmektedir.
Persistence teknolojisinin en temel kullanımı hakkında Netbans’ın resmi sitesindeki:
http://www.netbeans.org/kb/60/java/gui-db.html
adresli makale inclenebilir. Bu makalede varolan bir veritabanından CRUD uygulaması ya da CREATE,UPDATE,DELETE uygulamasının yani Türkçesi ile; Veri ekleme, Veri güncelleme, Veri Silme uygulamasının yapılışı anlatılmaktadır. Buna bir de listeleme özelliği eklemek gerekir nitekip program listeleme özelliğini de otomatik olarak oluşturuyor.
Buraya kadar sorun yok;
Ancak Netbeans’ta sözkonusu makalede geçen veritabanından ya da kendinzize ait özel veriabanından spesifik sorgulama yapmak istediğinizde sofistike sql sorgusu rahatlığında işi gerçekleştiremiyorsunuz.
Bunun için geçirdiğim iki uykuz geceden sonra ortaya çıkardığım metodu sizlerle paylaşayım:

Netbeans\'de persistence kullanımı

(Resim2: Suat ATAN tarafından yazılan bir uygulanada Netbeans IDE’nin Inspector ekranı)

Gerek Netbeans’ın Desktop Database Project seçeneği ile otomatikmen oluşturulan projelerinde gerekse sizin program içinde herhangi bir component’e sağ tıklayıp data bindirmek için “bind” ibaresini tıklamanızda ekran kesitinde görüldüğü gibi kırmızı ve yeşil şeritle işaretlediğim componentler ortaya çıkar. Bu componentleri sağ tıklayıp properties (özellikleri) incelenince sorgunun:

SELECT t FROM Teklıfler t

gibi ilginç ve sql’den bozma olduğu görülür. Bu sorguyu maalesef WHERE, ORDER BY gibi taglarla zenginleştiremezsiniz. Bunun için yapmanız gereken işlem biraz uzun,şöyle ki;
Spesifik hale getirmek istediğiniz query’i (bundan böyle kırmızı şeritle işraretli comonenti ifade için böyle diyeceğim) seçip yine sağ tıklayarak “customize code” diyeceksiniz. Daha sonra kod bloğuna örneğin şöyle bir sorgu ekleyebilirsiniz:

Orjinalinde parantez içinde geçen sorgu SELECT t FROM Teklıflerlıstesı t iken siz şöyle yazabilirsiniz:

teklıflıstesıQuery = mocawaPUEntityManager.createQuery(“SELECT t FROM Teklıflıstesı t WHERE t.teklıfno ='”+SECILEN_TEKLIF_NO_STRING+”‘”);

Bu sorgu vasıtasıyla sorgumuzu filitreliyoruz. Gördüğünüz gibi biraz uzun ve sorgu dış parametre kabul etmiyor. Bu yüzden sorgu stringini değişken hale getiriyoruz. Durun daha bitmedi:
Bu hali ile herhangi bir yerden SECILEN_TEKLIF_NO_STRING değişkenini alarak veri dökümünü yapmaya çalışırsanız sonuçta yine veri dönmez. Bunun nedeni ise veri döküm listesinin örneğin bir tabloya ya da combobox’a bindirme işleminin Netbeans’ın standart programı içinde initComponents() metodu içinde kalması ya da bir kereye mahsus program başında çalıştırılması işidir.
Bu derdi de aşmak için verilerin ilgili component’e bir daha bindirilmesi gerekir. Bunu sağşamak için ise Netbeans’ın initComponents() metodu altındaki standart veri bindirme kodlarını kopyalayıp, sorgu filtre parameteresi ortaya çıktıktan sonraki olayla tekrar tetiklemektir.
Yani mesela bir buton tıklamasında bu kodları butonun tıklanma metodu altına tekrar yapıştırmaktır.

Aşağıda bunun güncel bir örneği var: (Kendi programımdan)

private void BT_TEKLIF_DETAYMouseClicked(java.awt.event.MouseEvent evt) {
// FİLTRE PARAMETERESİNİ BİR TEXTFİELDDEN ALIP DEĞİŞKENİMİZE YÜKLEDİK
SECILEN_TEKLIF_NO_STRING=SECILEN_TEKLIF_NO.getText();

//SORGUYU ENTITY MANAGER ILE TEKRAR İŞLEDİK
mocawaPUEntityManager = javax.persistence.Persistence.createEntityManagerFactory(“mocawaPU”).createEntityManager();

teklıflıstesıQuery = mocawaPUEntityManager.createQuery(“SELECT t FROM Teklıflıstesı t WHERE t.teklıfno ='”+SECILEN_TEKLIF_NO_STRING+”‘”);
teklıflıstesıList = teklıflıstesıQuery.getResultList();

//ŞİMDİ SONUÇLARI TABLOYA YENİDEN İŞLİYORUZ
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, teklıflıstesıList, TABLO2);
org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${teklıfno}”));
columnBinding.setColumnName(“Teklıfno”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${boy}”));
columnBinding.setColumnName(“Boy”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${bırımfıyat}”));
columnBinding.setColumnName(“Bırımfıyat”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${dalga}”));
columnBinding.setColumnName(“Dalga”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${ebatSerıNo}”));
columnBinding.setColumnName(“Ebat Serı No”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${en}”));
columnBinding.setColumnName(“En”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${fıyatsafıaenı}”));
columnBinding.setColumnName(“Fıyatsafıaenı”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${kalıte}”));
columnBinding.setColumnName(“Kalıte”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${safıaboyu}”));
columnBinding.setColumnName(“Safıaboyu”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${safıaenı}”));
columnBinding.setColumnName(“Safıaenı”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${yukseklık}”));
columnBinding.setColumnName(“Yukseklık”);
columnBinding.setColumnClass(String.class);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();

TEKLIF_DETAYLARI.setSize(600, 600);
TEKLIFLER_EKRANI.setVisible(false);
TEKLIF_DETAYLARI.setVisible(true);
TEKLIF_DETAYLARI.setTitle(“TEKLİF DETAYI: “+SECILI_FIRMA.getText());
}

Evet yukarıdan da anlaşılacağı üzere püf noktamız;

  1. Sorgumuzu yenilemek
  2. Ortaya çıkan sonuçları ilgili componentimize tekrar yüklemek
  3. Sorgularımızı alışılmış SQL tarzında değil, biraz daha özel bir formda string olarak kurmak

Değerli arkadaşlar;

Bu makalenin faydalı olacağına inanıyorum. Her türlü soru ve sorunlarınız için bana ulaşabilirsiniz.
Bu makaleyi de kaynak göstermek kaydı ile istediğiniz gibi kullanma hakkınız var.

Sevgi ve Java ile…

Reklamlar

Yayınlayan

“Netbeans’de Persistence Kullanımı ve önemli ipuçları” için 6 yorum

  1. Oncelikle iyi gunler diliyorum.Ben anadolu uni. ele-elo muh bolumunde okuyorum.ve veri tabani ile ilgili bir projem var.eger uygun bir zamanininz olursa cevap verirseniz cok memnun olurum.Ben mysql ve netbeans kullanarak bir dersane icin uygulama yapiyorum.yukardaki araba ornegini yaptim ama dediginiz gibi benden istenen sorguyu karsilamadi,eger bu mesajim size ulasirsa ve yardim etmek isterseniz bana ulasin bende sorunu tam olarak anlatayim.sitesniz ve bilgileriniz cok guzel basarilar dilerim.

  2. METİN GENÇ arkadaşımızın sorusuna cevap

    Metin Bey;
    Ben de Persistence’den tam da bu yüzden hazzetmiyorum.
    Yani dolayısıyla netbeans 6.0’daki bu özelliğin biraz daha gelişmesini bekleyeceğiz.
    Elbette persistence bilgisi ile netbeans’ta öncelikle makalemdeki gibi basit CRUD programları yazabiliriz.
    Ancak size önerim bunun yerine standart bağlantı yöntemlerini kullanmanızdır.
    Geçenlerde gerçekleştirdiğim bir projede de aynı sıkıntı ile karşılaştım.
    Bildiğim yöntemlerle bağlantı komutlarını yazdım.
    Persistence’den daha rahat olduğunu düşünüyorum.
    Bu projeyi siz de inceleyebilirsiniz.
    http://code.google.com/p/mocawa/
    adresine girerek bir dostum için yazdığım veritabanı uygulamasını inceleyiniz.
    SVN kullanarak direkt netbeans’a download edebilirsiniz.

    Sevgilerimle…
    Suat

    Merhabalar suat bey;

    finallerden dolayi biraz gec oldu yanitlamam kusura bakmayin;

    Netbeans ta deskt database app yaratirken tablo secip yaratiyoruz ya,peki 2.
    bir tablomuz daha varsa ve onuda yaratip bilgilerini degistirme sansimiz varmi acaba?ornegin bir database imiz var ogrenci diye;

    2 tablodan biri kayit digeri program;

    kayit icin deskt database app yarattik,ayni projeye program tablosunu ekleyip
    ayni ilki gibi textfield alanlarini nasil yerlestirbiliriz,yane proje ayni ama farkli framelerde iki tablonunnda bilgileri degissin ve sorun cikmasin bun nasil olabilir ?

    tesekkur ederim ii gunler:))

    Metin Bey;
    Merhabalar;
    Web sayfam üzerinden yolladığınız sorunu okudum.
    Sorununuzu tam olarak anlatırsanız vaktim ve imkanlarım doğrultusunda yardımcı olurum.
    İlgiliniz için teşekkürler.

    Sevgiler

  3. merhaba acaba sızın bu projenızı ıncelemek ıcın source code larını edınmemız mumkunmu jar halını ınceledım boyle bır sample arıyordum tesekkur ederım

  4. Murat Bey;
    Siteme bırakmış olduğunuz mesajı yeni okudum.
    Mocawa adlı uygulamanın kaynak kodlarını yine makale içinde geçen sitedeki source menüsünden trunk adlı klasör içinde inceleyebilir SVN versiyon sistemi ile IDE’nize direkt olarak indirebilirsiniz.

    Saygılarımla.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s