Merhaba arkadaşlar. Bu yazıda veri tabanından nasıl kayıt silineceğini göreceğiz. Konuyu anlatırken daha rahat anlamanız için önceki örnekte yaptığımız güncelleme işlemine kod eklemesi yapacağım. Önceki yazımı okumadı iseniz buraya tıklayarak okuyabilirsiniz. Bu yazıda veri tabanına yanlış girilmiş bir kaydı sileceğiz. Aşağıdaki resimde göreceğiniz gibi veri tabanına olmayan bir yazar ve olmayan bir alan eklenmiş. Biz bu kaydı sileceğiz.
Şimdi silme işlemini nasıl yaptığımıza bakalım. Önceki yazıda yaptığımız güncelleme işlemindeki kodlara sadece bir .java dosyası ve index.xhtml içine 3 satır kod ekleyeceğiz.
index.xhtml Kodu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"> <h:head> <title>Facelet Title</title> <script>// Güncelleme işlemi sonucunu pop-up olarak bize verecek. function mesaj(){ if(#{g.Guncelle()}) alert("Güncelleme Başarılı."); else alert("Güncelleme Başarısız."); } </script> </h:head> <h:body> <h:form> <h:inputText value="#{g.text}"/><!--Girilen adı javakoduna yollayacak--> <h:commandButton action="#{g.KayitCek}" value="GÖNDER"/><!--Kaydı veritabanından çeken metodu çalıştıracak.--> <h:dataTable value="#{g.liste}" var="yaz"><!--Gelen sonuçlar buraya aktarılacak.--> <h:column> <f:facet name="header">Adi</f:facet> <h:inputText value="#{yaz.adi}" rendered="#{yaz.guncellenebilirlik}"/> <!--Güncelle linkine tıklayınca bu kısım devreye girecek.--> <h:outputText value="#{yaz.adi}" rendered="#{not yaz.guncellenebilirlik}"/> <!--Kayıt çekilince ilk burası gelecek. rendered kısmı görünürlüğü işaret ediyor.--> </h:column> <h:column> <f:facet name="header">Alanı</f:facet> <h:inputText value="#{yaz.alani}" size="10" rendered="#{yaz.guncellenebilirlik}"/> <h:outputText value="#{yaz.alani}" rendered="#{not yaz.guncellenebilirlik}"/> </h:column> <h:column> <f:facet name="header">Action </f:facet> <h:commandLink value="Güncelle" action="#{g.guncellenebilirligiDegistir(yaz)}" rendered="#{not yaz.guncellenebilirlik}"/> <!--Güncellenebilrliği aktifleştirecek link.--> <h:commandLink action="#{kayitSilme.KayitSil}" value="Sil"> <f:param name="ID" value="#{yaz.ID}"/> </h:commandLink> </h:column> </h:dataTable> <h:commandButton value="Değişiklikleri Kaydet" action="#{g.DegisikliğiKaydet()}"/> <!--Yapılan güncellmeyi listeye kayıt edecek.--> <h:commandButton value="Güncellemeleri Veri Tabanına Kaydet" action="#{g.Guncelle}" onclick="mesaj()"/> <!--Güncellemeyi veri tabanına aktaracak ve alert verdirecek.--> </h:form> </h:body> </html> |
İndex.xhtml kodu içinde sadece “Action” kolonu içine kod eklemesi yaptık. Sil commandLink’ini ekledik. CommandLink’in action kısmına aşağıdaki .java kodunda yer alan KayitSil metodunu verdik. Burada işin püf noktası silmek istediğimiz kaydın KayitSil metoduna nasıl gönderileceğidir. Biz silmek istediğimiz kaydı metoda JSF’in parametre göndermeye yarayan <f:param> etiketi ile göndereceğiz. <f:param> etiketindeki name kısmı metot içinde özel olarak bir nesneyi almamızı sağlayacak. Bu örnek için biz name kısmına ID verdik ve metot içinde de bu ID’yi çekip kullanacağız. Value kısmına da gönderilecek parametreyi yazıyoruz. Biz ID parametresini kullanacağımız için value’ya ID parametresini atadık. Metot içinde ID isimli parametre çekilince ID değeri alınmış olacak.
KayitSilme.java Kodu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import javax.faces.bean.*; import javax.faces.context.*; import java.sql.*; import java.util.Map; @ManagedBean @ViewScoped public class KayitSilme { private int ID; Connection con; PreparedStatement ps; int i; public boolean KayitSil(){ FacesContext fc = FacesContext.getCurrentInstance(); this.ID = Integer.parseInt(IDParametresiniAl(fc)); try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost:3306/kod5","ilkay","123456"); ps=con.prepareStatement("DELETE FROM yazarlar WHERE ID=?"); ps.setInt(1, ID); i=ps.executeUpdate(); } catch(SQLException | ClassNotFoundException exception) { System.out.print(exception); } finally { try { if(con!= null){ con.close(); } if (ps!=null) { ps.close(); } } catch (SQLException exception) { System.out.println("Bir Hata Meydana Geldi!\nHata:"+exception); } } if(i>0) return true; else return false; } public String IDParametresiniAl(FacesContext fc) { Map<String,String> parametreler = fc.getExternalContext().getRequestParameterMap(); return parametreler.get("ID"); } } |
Java kodumuz içinde iki metot bulunuyor. IDParametresiniAl metodu içinde xhtml sayfası içinden gönderilen ID parametresi String türünde alınıyor. Alınan ID KayitSil metodu içinde SQL komutu içine atılıyor ve komut çalıştırılıyor. Komut başarılı olursa true değeri olmazsa false değeri döndürdük. Önceki örnekte true değeri dönmesi durumunda yine indexe dönmesini faces-config.xml içinde yapmıştık. Faklı olarak burada FacesContext tipindeki nesneyi görmektesiniz. Bu nesne parametre iletimi sırasında çok işimize yarıyor.
Ekran çıktılarına da bir bakalım.
Bu yazıda da bu kadar arkadaşlar. Veri tabanı konusunu bitirdik. Gelecek yazıda başka bir konu olan actionListener konusuna gireceğiz. Esen kalın.
Selamlar dostum,
Yaptığın paylaşımlar gerçekten çok kıymetli eline sağlık.
JDBC ile verileri güncelleme ile ilgli youtube videolarını izleyerek yapmaya çalıştım. Takıldığım bir yer var.
7. videodan sonra projeleri gitHub a koymayı bırakmışsın dosyaları paylaşman mümkün müdür? Özellikle JDBC ile ilgili 4 videodan sonra elinde oluşan toplu projeyi koyabilirsen çok iyi olur.
Şimdiden sağolasın, teşekkürler.
Merhaba.
Müsait vakitte koyayım inşaAllah. Koyunca buraya yorum atarım.
Kolay gelsin.