JSF

JSF Dersleri-Veri Tabanından Kayıt Çekme

Merhabalar arkadaşlar. Bu yazımızda JSF ile veri tabanından nasıl kayıt çekileceğini göreceğiz. Önceki yazımızda kayıt eklemeyi öğrenmiştik. Ben yine o yazıdaki veritabanı ve tabloyu kullanacağım.

Veri tabanından kayıt çekerken biz bir sonuç kümesine (ResultSet) ihtiyaç duyarız. Bu sonuç kümesine veri tabanından dönen sonuç atanır ve biz de uygun metot ile ilgili sütunu alırız. Mesele ResulSet’imizin adı rs olsun ve yazar adalarını çekmek isteyelim. O zaman rs.getString(“Adi”); diyerek yazar adlarını almış oluruz. Tabi burada where koşulu kullanılmadığını ve SELCET * yapıldığını varsayarak böyle diyorum. Daha sonra bu sonuç kümesi içinden aldığımız değerleri bir listeye atarız. Dizi de kullanabiliriz ama bellek işgali gibi sebeplerden ötürü liste kullanmak daha mantıklı. Listeyi de bir dataTable ile ekrana basıcaz. Listeyi direk dataTable’ın value özelliğine atayarak kullanamıyoruz, bunun yerine bir var nesnesi tanımlayıp o nesne ile adeta bir döngü şeklinde kayıtları ekrana döküyoruz. Şöyle düşünebiliriz: Java sınıfı içindeki DataTable’ın value özelliğine atıyoruz, DataTable sanki kendi içinde for ya da while döngüsü işletiyormuşçasına bir var nesnesi ile tüm kayıtları ekra döker.

Veri tabanımız şu şekilde. Önceki yazıda yazdığımız uygulama ile yeni kayıtlar ekleyip bu hale getirebilirsiniz.

records

Kodlarımız da şu şekildedir. Yine açıklamalarını kod satırları içinde verdim.

kayitCek.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"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:dataTable value="#{kayitCek.yazarlarTablosu}" var="yaz">
        <!--Burada var nesnesi her satır için özelleşmiş olacak ve DataTable bir döngü işletirmişcesine kayıtları ekrana dökecek.-->
            <h:column>
                <f:facet name="header"><!--Sütunun başlığını belirteceğimiz etiket.-->
                    <h:outputLabel>Adi</h:outputLabel><!--Sütunun başlığı.-->
                </f:facet>
                <h:outputLabel value="#{yaz.adi}"/><!--Sütuna yazılacak değer .-->
            </h:column>
            <h:column>
                <f:facet name="header"><!--Sütunun başlığını belirteceğimiz etiket.-->
                    <h:outputLabel>Alani</h:outputLabel><!--Sütunun başlığı.-->
                </f:facet>
                <h:outputLabel value="#{yaz.alani}"/><!--Sütuna yazılacak değer .-->
            </h:column>
        </h:dataTable>
    </h:body>
</html>

KayitCek.java Kodu

import java.sql.*;
import java.util.*;
import javax.faces.bean.*;
@ManagedBean
@RequestScoped
public class KayitCek {
    
    PreparedStatement ps=null;//SQL sorgumuzu tutacak ve çalıştıracak nesne.
    Connection con=null;//Veri tabanına bağlantı yapmamızı sağlayacak nesne.
    public List<AdiAlaniPojo> getYazarlarTablosu() {
        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.
            ps=con.prepareStatement("SELECT * FROM yazarlar");//Yazarlar tablosundaki herşeyi çek diyoruz.
            ResultSet rs=ps.executeQuery();//SQL Sorgusundan dönecek sonuç rs sonuç kümesi içinde tutulacak.
            List<AdiAlaniPojo> liste=new ArrayList<>();//AdiAlani sınıfı tipinde liste tanımladık çünkü SQL Sorgusundan dönecek sonuç içindeki Adi Alani kısmına bu tiple ulaşacaz.
            while(rs.next())//Kayıt olduğu sürece her işlem sonunda 1 satır atla.
            {
                AdiAlaniPojo aa=new AdiAlaniPojo();//SQL Sorgusundan sütunları çekip bu değişkenin içinde Adı veya Alani kısmına atıyacağız.
                aa.setAdi(rs.getString("Adi")); //ResultSet içinden o anki indisdeki "Adi" anahtar kelimesine karşı gelen değer alınıyor.
                aa.setAlani(rs.getString("Alani")); //ResultSet içinden o anki indisdeki "Alani" anahtar kelimesine karşı gelen değer alınıyor.
                liste.add(aa);//Her bir dönen sonucu listeye ekliyoruz.
            }
            return liste;//Listeyi return ediyoruz.
        } 
        catch (ClassNotFoundException | SQLException exception) {
            System.out.println("Bir hata meydana geldi:"+exception);
            return null;
        }
        finally{ //try'a da düşse catch'e de bu bloktaki kod çalıştırılacak.
            try {
                if(con!=null){ //Connection nesnesi belki yukarıda null kalmış olabilir. Kontrol etmekte fayda var.
                    con.close();
                }
                if(ps!=null){ //PreparedStatement nesnesi yukarıda null kalmış olabilir. Kontrol etmekte fayda var.
                    ps.close();
                }
            } catch (SQLException sqlException) {
                System.out.println("Bir hata meydana geldi:"+sqlException);
            }
        }
    }
}

AdiAlaniPojo.java Kodu

public class AdiAlaniPojo {
    private String Adi;
    private String Alani;

    public String getAdi() {
        return Adi;
    }

    public void setAdi(String Adi) {
        this.Adi = Adi;
    }

    public String getAlani() {
        return Alani;
    }

    public void setAlani(String Alani) {
        this.Alani = Alani;
    }
    
}

Ekran Çıktısı

selectRecordPage

Bu yazıda da bu kadar arkadaşlar. Gelecek yazıda güncelleme (update) işlemine bakacağız. Görüşmek üzere.

12 Yorum

  • hocam inputtextareadan gireceğim değeri sql sorgusuna nasıl ekleyebilirim mesela select * from deneme where donem = 2015-2016; gibi bir sorgu çalıştırmak istediğimde 2015-2016 yı kullanıcının ekrandan girmesini istediğimde SQL sorusuna nasıl eklemem gerekiyor. Paylaşımlarınız ve desteğiniz için çok teşekkür ederim

    • Merhaba Dursun.
      Öncelikle bu durumun Sql injectiona sebep olma riski yüksek. Bunu gözönüne kodunu ona göre iyi yazman lazım.
      Eğer kişi inputTextAreaya 2015-2016 diye giriş yapacaksa sen java kodu içinde String sql =”select * from table where donem =? ”
      Deyip preparedStatement a ilgili değeri set edip kodu çalıştırırsan amacına ulaşırsın gibime geliyor.
      Ben de teşekkür ederim kolay gelsin. Olmazsa yine yorum at, daha detaylı bakarız.

İlkay Günel için bir yanıt yazın X