26 Mayıs 2016 Perşembe

Java ile Verileri Tabloda (jTable) Gösterme

Evet bundan önceki yazımızda java ile veritabanı işlemlerini gerçekleştiren sınıflarımızı oluşturmuştuk. Bu yazımda ise, gelen sorular üzerine veritabanından çekilen verileri jTable içerisinde görüntülemeyi anlatacağım. Öncelikle şunu belirteyim daha önce c#, vb.net gibi dillerde programlama yaptıysanız datatable, dataset gibi kontrolleri arıyor olabilirsiniz. Fakat java içerisinde bu kavramlar yer almıyor. O zaman nasıl verilerimizi tabloda göstereceğiz, adım adım anlatalım.
Öncelikle formumuzu tasarlıyoruz. Tasarım yaparken bir GUI kullanmakta fayda. Öncelikle jScrollpane’i jFrame’in içine yerleştirelim. jScrollpane tablonun kaydırma işlemleri için gerekli olacak. Daha sonra  jTable’ı jScrollpane’in içerisine koyarak uygun şekilde boyutlandırıyoruz. jTable’ın ismini(variable) “table” olarak değiştirelim. Son olarak tablomuzu doldurmak için bir adet jButton’a ihtiyacımız olacak. İşlemleri sırayla yaptığınızda aşağıdaki gibi bir ekran görüntüsü elde edeceksiniz. Tabi tablo içerisinde ki verileri saymazsak.





package com.anaokulotomasyonu.sultan.ui; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import com.anaokulotomasyonu.sultan.db.OgrenciKayitDao; import com.anaokulotomasyonu.sultan.domain.OgrenciKayitDomain; public class OgrenciListesiGui extends JDialog { public OgrenciListesiGui() { initPencere(); } private void initPencere() { JPanel panel = initPanel(); getContentPane().add(panel); setTitle("Öğrenci Listesi"); setSize(950, 400); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setModalityType(DEFAULT_MODALITY_TYPE); setLocationRelativeTo(null); setResizable(false); setVisible(true); } private JPanel initPanel() { JPanel anaJPanel = new JPanel(new BorderLayout()); JPanel panel_1 = new JPanel(); anaJPanel.add(panel_1, BorderLayout.SOUTH); ImageIcon silIcon = new ImageIcon("images/çöp.png"); JButton btnNewButton_1 = new JButton(" SİL ", silIcon); panel_1.add(btnNewButton_1); ImageIcon iptalIcon = new ImageIcon("images/iptal.png"); JButton btnNewButton_2 = new JButton(" İPTAL ", iptalIcon); panel_1.add(btnNewButton_2); btnNewButton_2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); JPanel panel_2 = new JPanel(); anaJPanel.add(panel_2, BorderLayout.CENTER); panel_2.setLayout(null); String dizi[] = { "ID", "TC NO", "ADI", "SOYADI", "DOĞUM TARİHİ", "VELİ ADI", "TELEFON", "ADRES" }; DefaultTableModel model = new DefaultTableModel(dizi, 0); JTable table = new JTable(model); JScrollPane listePane = new JScrollPane(table); listePane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); listePane.setBounds(10, 55, 924, 272); panel_2.add(listePane); for (OgrenciKayitDomain list : OgrenciKayitDao.listele()) { model.addRow(list.getObjects()); } JLabel lblAra = new JLabel("TC No :"); lblAra.setBounds(677, 20, 46, 14); panel_2.add(lblAra); JTextField textField = new JTextField(); textField.setBounds(718, 17, 148, 20); panel_2.add(textField); textField.setColumns(10); ImageIcon araIcon = new ImageIcon("images/ara.png"); JButton btnNewButton_3 = new JButton("", araIcon); btnNewButton_3.setBounds(876, 11, 46, 34); panel_2.add(btnNewButton_3); JButton btnListele = new JButton("listele"); btnListele.setBounds(44, 16, 89, 23); panel_2.add(btnListele); btnNewButton_1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { OgrenciKayitDomain silinecekDomain = new OgrenciKayitDomain(); int secilenSatir = table.getSelectedRow(); int id = (Integer) model.getValueAt(secilenSatir, 0); silinecekDomain.setId(id); OgrenciKayitDao.sil(silinecekDomain); int satirSayisi = model.getRowCount(); for (int i = 0; i < satirSayisi; i++) { model.removeRow(0); } List<OgrenciKayitDomain> listele2 = OgrenciKayitDao.listele(); for (OgrenciKayitDomain yenilistDomain : listele2) { model.addRow(yenilistDomain.getObjects()); } JOptionPane.showMessageDialog(null, "silme işlemi başarılı"); } }); return anaJPanel; } }






OgrenciListeleDao.java




package com.anaokulotomasyonu.sultan.db; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.anaokulotomasyonu.sultan.domain.OgrenciKayitDomain; public class OgrenciKayitDao { public static void tabloyuOlustur() { Connection con = ConnectionToDb.getConnection(); try { Statement stmt = con.createStatement(); stmt.executeUpdate( "CREATE TABLE ogrenci(id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1) ,tcNo VARCHAR(50),adi VARCHAR(50),soyadi VARCHAR(50),tarih VARCHAR(50),veliAdi VARCHAR(50),telefon VARCHAR(50),adres VARCHAR(100),onKayit VARCHAR(50),taksit VARCHAR(50))"); stmt.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block // e.printStackTrace(); System.out.println("öğrenci tablosu Zaten var"); } } public static void ekle(OgrenciKayitDomain eklenecekOgrenciDomain) { Connection con = ConnectionToDb.getConnection(); try { PreparedStatement sorgu = con.prepareStatement( "INSERT INTO ogrenci(tcNo,adi,soyadi,tarih,veliAdi,telefon,adres,onKayit,taksit) VALUES(?,?,?,?,?,?,?,?,?)"); sorgu.setString(1, eklenecekOgrenciDomain.getTcNo()); sorgu.setString(2, eklenecekOgrenciDomain.getAdi()); sorgu.setString(3, eklenecekOgrenciDomain.getSoyadi()); sorgu.setString(4, eklenecekOgrenciDomain.getTarih()); sorgu.setString(5, eklenecekOgrenciDomain.getVeliAdi()); sorgu.setString(6, eklenecekOgrenciDomain.getTelefon()); sorgu.setString(7, eklenecekOgrenciDomain.getAdres()); sorgu.setString(8, eklenecekOgrenciDomain.getOnKayit()); sorgu.setString(9, eklenecekOgrenciDomain.getTaksit()); sorgu.executeUpdate(); sorgu.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void sil(OgrenciKayitDomain silinecekOgrenciDomain) { Connection con = ConnectionToDb.getConnection(); try { PreparedStatement sorgu = con.prepareStatement("DELETE FROM ogrenci WHERE id = ?"); sorgu.setInt(1, silinecekOgrenciDomain.getId()); sorgu.executeUpdate(); sorgu.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static List<OgrenciKayitDomain> listele() { List<OgrenciKayitDomain> liste = new ArrayList<OgrenciKayitDomain>(); Connection con = ConnectionToDb.getConnection(); try { Statement sorgu = con.createStatement(); ResultSet veriler = sorgu.executeQuery("SELECT * FROM ogrenci"); while (veriler.next()) { OgrenciKayitDomain siradakiOgrenciDomain = new OgrenciKayitDomain(); siradakiOgrenciDomain.setId(veriler.getInt("id")); siradakiOgrenciDomain.setTcNo(veriler.getString("tcNo")); siradakiOgrenciDomain.setAdi(veriler.getString("adi")); siradakiOgrenciDomain.setSoyadi(veriler.getString("soyadi")); siradakiOgrenciDomain.setTarih(veriler.getString("tarih")); siradakiOgrenciDomain.setVeliAdi(veriler.getString("veliAdi")); siradakiOgrenciDomain.setTelefon(veriler.getString("telefon")); siradakiOgrenciDomain.setAdres(veriler.getString("adres")); siradakiOgrenciDomain.setOnKayit(veriler.getString("onKayit")); siradakiOgrenciDomain.setTaksit(veriler.getString("taksit")); liste.add(siradakiOgrenciDomain); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return liste; } }




Son olarak tabloyuDoldur metodumuzu buttonun “actionPerformed” eventi içerisinden çağırıyoruz. Verilerimiz tablonun içerisinde yukarda gördüğünüz şekilde doldurulacak. 

12 Mayıs 2016 Perşembe

Java Ile Veri Tabani Islemleri Kaydetme, Silme, Görüntüleme, Güncelleme

Merhaba bu yazımda, java ile temel veritabanı işlemlerini yani kayıt ekleme, kayıt silme, kayıt görüntüleme ve kayıt güncelleme işlemlerinin nasıl yapıldığını anlatacağım. Ben veritabanı olarak derby’i kullanıyorum. Siz hangi veritabanını kullanırsanız kullanın veritabanı işlemlerini gerçekleştiren kodlarda bir değişiklik olmayacaktır. Sadece veritabanına bağlantı için gerekli olan bağlantı cümlesi değişecektir. Neden derby veritabanını kullanıyorsun, diyebilirsiniz. Derby, embedded (gömülü) bir veritabanı. Yani projenizi başka bilgisayara taşıdığınızda veritabanını da proje dosyasıymış gibi yanınızda götürebiliyorsunuz, ayrıca bir kurulum yapmanıza gerek kalmıyor. Ayrıca içerisinde verileriniz yoksa 3MB lık bir alan kaplıyor. Küçük projeler için ideal diyebilirim. Son olarak projenizde hangi veritabanını kullanacaksanız ona ait jar dosyasını kütüphaneye eklemeyi unutmayın. Ben derby.jar dosyasını proje kütüphanesine ekledim. Örneğimizi öğrenci bilgilerini veri tabanına kaydetme-görüntüleme-güncelleme ve silme şeklinde yapacağız. Öncelikle Okul isminde bir veritabanı ve veritabanımızın içinde ogrenci isminde bir tablo oluşturalım. Ogrenci tablosunu oluşturmak için aşağıdaki sql sorgusunu kullanabilirsiniz.








CREATE TABLE APP.ogrenci(
ogrnum int PRIMARY KEY NOT NULL,
isim varchar(255),
soyisim varchar(255),
dyeri varchar(255)
)



Sürekli öğrenci bilgileriyle çalışacağımız için Ogrenci adında bir sınıf oluşturup, Getter ve Setter bloklarını yazıyoruz.

public class Ogrenci {
      
       private int ogrNo;
       private String isim;
       private String soyIsim;
       private String dYeri;
       public int getOgrNo() {
             returnogrNo;
       }
       public void setOgrNo(intogrNo) {
             this.ogrNo = ogrNo;
       }
       public String getIsim() {
             returnisim;
       }
       public void setIsim(String isim) {
             this.isim = isim;
       }
       public String getSoyIsim() {
             returnsoyIsim;
       }
       publicvoid setSoyIsim(String soyIsim) {
             this.soyIsim = soyIsim;
       }
       public String getdYeri() {
             returndYeri;
       }
       public void setdYeri(String dYeri) {
             this.dYeri = dYeri;
       }          
}
Şimdi asıl konumuz olan, java ile veritabanı işlemlerini gerçekleştiren kodlara gelelim. Tüm veritabanı işlemlerini VtIslemleri ismindeki sınıfımız aracılığıyla gerçekleştireceğimizden bu sınıfımızı oluşturuyoruz. Kodların açıklamalarını kod aralarına yorum satırı olarak ekledim.

Veritabanına Bağlantı Oluşturulması

Bu aşamada ve bundan sonraki veritabanı işlemlerinde JAVA dilinde bulunna java.sql.* paketini kullanıyoruz. Bu paket için
import java.sql.*;
satırını kodumuzun başına ekliyoruz.
Bağlantıyı oluşturmak için java.sql.Connection sınıfından (class) bir nesne (object) oluşturuyoruz. Bu işlem için aşağıdaki satırı kullanabiliriz:
 Connection con = DriverManager.getConnection(
"jdbc:derby://localhost:1527/xyz;user=sadi;password=evren;");
Bağlantının kapatılması
Son olarak JAVA ile veritabanı arasındaki bağlantının kapatılması gerekir. Bu işlem için
con.close();
satırı kullanılabilir.
Tam çalışır kod
Yukarıdaki verilen parçalı ve açıklamalı kodun tamamı aşağıda tek adımda verilmiştir. Yukarıdaki koda ilave olarak çeşitli satırlarda try / catch blokları ile SQLException yakalandığına dikkat ediniz. Bunun sebebi beklenmedik bir durumda JAVA‘nın SQLException catch edilmesini zorunlu tutmasıdır.
import java.sql.*;
/**
 *
 * @author shedai
 */
public class dbAbstract {
    Connection con;
    public void close() {
         try{
              con.close();
         }
         catch(Exception e){}
 }
 public dbAbstract(){
     try{
     con = DriverManager.getConnection(
        "jdbc:derby://localhost:1527/xyz;user=sadi;password=evren;");
     }
     catch(SQLException exp){
        exp.printStackTrace();
     }
 }
 public boolean Authenticate(String User,String Pass){
     try{
          Statement sta = con.createStatement();
          ResultSet res = sta.executeQuery(
          "SELECT * FROM USERTABLE where USERNAME='"+User+"';");
          while (res.next()) {
             if(Pass.equals(res.getString("PASSWORD")))
              return true;
      }
      res.close();
      sta.close();
      return false;
     }catch(SQLException exp){
         exp.printStackTrace();
         return false;
     }
 }
}

Veri Tabanı bağlantısından bilgileri JTAble'a çekerek görsel olarak gösteren kod
Betül Hanımın sorusu üzerine aşağıdaki kodu yazdım ve basitçe veri tabanından veri çekip JFrame içerisindeki bir JTable bileşenine (component) ekliyoruz.

import java.sql.*;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JTable;
/**
 *
 * @author shedai
 */
public class NewClass {
    Connection con;
    public void close() {
         try{
              con.close();
         }
         catch(Exception e){}
 }

 public NewClass(){
     try{
    con = DriverManager.getConnection( "jdbc:mysql://localhost/deneme", "root", "" );  
     }
     catch(SQLException exp){
        exp.printStackTrace();
     }
 }
 JTable jt;
 public void tablo(){
     try{
          Statement sta = con.createStatement();
          ResultSet res = sta.executeQuery(
          "SELECT * FROM persons");
          Vector satirlar = new Vector();
          Vector satir[] = new Vector[2];
          satir[0] = new Vector();
          satir[1] = new Vector();
          int s = 0;
          while (res.next()) {

              for(int i = 1;i<6;i++){
               satir[s].add(res.getString(i));
                System.out.println(res.getString(i));
              }
              s++;

          }
          satirlar.add(satir[0]);
          satirlar.add(satir[1]);
          Vector basliklar = new Vector();
          basliklar.add("id");
          basliklar.add("soyisim");
          basliklar.add("isim");
          basliklar.add("adres");
          basliklar.add("şehir");
          jt = new JTable(satirlar,basliklar);

      res.close();
      sta.close();

     }catch(SQLException exp){
         exp.printStackTrace();

     }
 }
 public static void main(String args[]){
     NewClass nc = new NewClass();
     nc.tablo();
     JFrame jf = new JFrame();
    jf.add(nc.jt);
    jf.setVisible(true);

 }
 }
Öncelikle, hazır yeni bir kod yazıyorken, MySQL bağlantısını da örneklendirmiş olmak için kodu, MySQL sunucusna bağlanan şekilde yazdım. MySQL sunucunda öncelikle deneme isminde bir tablo oluşturduk:
CREATE TABLE IF NOT EXISTS `persons` (
`P_Id` int(11) NOT NULL,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255) DEFAULT NULL,
`Address` varchar(255) DEFAULT NULL,
`City` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Kodun çalışmasının ardından ekran çıktısı aşağıdaki şekildedir: