Merhaba arkadaşlar. Bu yazıda veri tabanına JSF ile nasıl kayıt yollanacağını göreceğiz. Kayıt yollama işlemine başlamadan önce eğer MySQL için veri tabanı oluşturma ve tablo ekleme işlemlerini bilmiyorsanız ilgili yazıma buradan ulaşabilirsiniz. Şimdi nasıl kayıt ekleneceğine bakalım.
NetBeans ortamında “KayitEkleme” adında bir JSF projesi açalım. Projemize “DegiskenlerveBaglanti” adında bir managed bean ekleyelim. Projemize MySql sürücüsünü de ekleyelim ve bu eklemeyi yapmayı diğer uygulamalarda da sakın unutmayalım.Kullanacağımız veri tabanında “yazarlar” adında bir tablo var ve bu tablo “Adi” ve “Alani” sütunlarına sahip. Bunun için Java sınıfımız içinde “isim” ve “alanı” adında iki değişken tanımlayacağız ve xhtml sayfasının bu değişkenleri tanıması ve veri gönderebilmesi get ve set metotlarını tanımlıyoruz. Xhtml sayfası içinde de ismi ve alanı alanı birer inputText ve bir de verileri gönderecek bir buton tanımlıyoruz. Buraya kadar işlemler bildiğimiz şeyler. Şimdi esas kısma girelim.
Java sınıfımız içinde veri tabanına kayıt gönderirken kullandığımız nesnelerin ve yapıların açıklamasını ayrıca vermek yerine kod içinde verdim bu kez. Kodlarımız şu şekilde:
index.xhtml Kodu
<?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"> <h:head> <title>Kayıt Ekleme</title> </h:head> <h:body> <h:form> <h:outputText value="Yazar Adını Giriniz:"/> <h:inputText value="#{degiskenlerveBaglanti.isim}"/> <h:outputText value="Yazarın Alanını Giriniz:"/> <h:inputText value="#{degiskenlerveBaglanti.alani}"/> <h:commandButton value="GÖNDER" action="#{degiskenlerveBaglanti.veriTabaninaGonder()}"/> </h:form> </h:body> </html>
DegiskenlerveBaglanti.java Kodu
import javax.faces.bean.ManagedBean; import java.sql.*; import javax.faces.bean.SessionScoped; @ManagedBean @SessionScoped public class DegiskenlerveBaglanti { String isim; String alani; int i=0; String errorMessage; public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public String getAlani() { return alani; } public void setAlani(String alani) { this.alani = alani; } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } public String veriTabaninaGonder()//Sayfadan girilen verileri veri tabanına gönderem metot. { PreparedStatement ps=null;//Veri tabanına gönderilecek bilgileri bu nesne tuttacak ve veri tabanına gönderecek. Connection con=null;//Veri tabanına bağlantı yapmamızı sağlayacak nesne. try { Class.forName("com.mysql.jdbc.Driver");//Hangi türde bir veri tabanını kullanacağını bildiriyoruz. con=DriverManager.getConnection("jdbc:mysql://localhost:3306/kod5","root","");//Bağlanacağı veri tabanını ve kullanacağı kullanıcı adı-parolayı bildiriyoruz. //String sql = "INSERT INTO yazarlar(Adı,Alanı) VALUES(?,?)";//Yazarlar tablosunun Adı ve Alanı sütununa değer göndereceğimi söylüyoruz. ps=con.prepareStatement("INSERT INTO yazarlar(Adi, Alani) VALUES(?,?)");//ps nesnesine SQL komutunu bildiriyoruz.İsterseniz parametre olarak SQL kodu yerine üstteki sql de verebilirsiniz. ps.setString(1, isim);//ps nesnesine gelen simi koyduk. ps.setString(2, alani);//ps nesnesine gelen alanı koyduk. i=ps.executeUpdate();//executeUpdate verilen sorguyu çalıştırır ve integer değer döndürür. //exequteUdate eğer 0'dan büyük değer döndürürse kayıt başarılı olmuş demektir. } catch(ClassNotFoundException | SQLException exception)//Hata olduğunda konsola verilecek. { System.out.println(exception); setErrorMessage(exception.toString()); } finally //Ne olursa olsun her koşulda çalışacak kısım { try { if(con!=null){ con.close(); } if(ps!=null){ ps.close(); } } catch(SQLException sqlException) { System.out.println(sqlException); } } if(i>0) //Sorgu başarılı olarak çalışınca i 0'dan büyük oluyor ve bizi başarılı sayfasına yönlediriyor. { return "basarili?faces-redirect=true"; } else //Sorgu başarısız ise başarısız sayfasına gidiyoruz. { return "basarisiz?faces-redirect=true"; } } }
basarili.xhtml Kodu
<?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"> <h:head> <title>Kayıt Başarılı</title> </h:head> <h:body> <h:form> <h:outputText value="Kayıt veri tabanına eklendi"/> </h:form> </h:body> </html>
basarisiz.xhtml Kodu
<?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"> <h:head> <title>Kayıt eklenemedi</title> </h:head> <h:body> <h:form> <h:outputText value="Kayıt vaeri tabanına eklenemedi!"/> <br/> <h:outputText value="Meydana Gelen Hata:#{degiskenlerveBaglanti.errorMessage}"/> </h:form> </h:body> </html>
Ekran çıktılarımıza bakalım bir de.
Örneğin ben veritabanı için geçersiz bir kullanıcı adı şifre ikilisi denediğimde başarısız sayfasında hatanın kaynağı da yer alıyor. (Resim büyük olduğu için burada net görünmemiş. Resme tıklayıp açılan sayfada bir kez daha tıklarsanız daha güzel görebilirsiniz.)
Şimdi başarılı kayıt eklemesi yapalım.
Kayıt ekleme işlemi bu şekilde arkadaşlar. Gelecek yazıda veri tabanından veri çekme işlemini yapacağız. Görüşmek üzere.
[…] Veritabanına kayıt ekleme yazımızda kayıtın nasıl eklendiğini öğrenmiştik. Burada Class.forname ve veritabanı yolunu değiştiriyoruz. Mysql için portumuz 3306 iken MS SQL Server için portumuz 1433. Uygulamayı çalıştırdığımızda kayıt eklenirse basarili.xhtml eklenemez ise basarisiz.xhtml sayfasına yönlendirileceğiz. […]
Selamlar,
Bunun faces-config.xml içeriği nasıl olacak?
“basarili?faces-redirect=true” bu nereye gideceğini nereden alıyor?