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.
1 2 3 4 5 6 |
CREATE TABLE APP.ogrenci( ogrnum int PRIMARY KEY NOT NULL, isim varchar(255), soyisim varchar(255), dyeri varchar(255) ) |
Tabloyu incelediğinizde ogrnum(P.K), isim, soyisim, dyeri olarak 4 tane alanımız olduğunu farketmişsinizdir. Veritabanı oluşturma işlemi tamamlandıysa Database Explorer penceresinde aşağıdaki gibi bir ekran görüntülüyor olmanız lazım.
Eğer sizde benim gibi derby veritabanını kullanıyorsanız, veritabanı ile işiniz bittiğinde sağ tıklayıp Disconnect diyerek bağlantıyı kesiniz.
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.
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 |
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.
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
import java.sql.*; import java.util.ArrayList; public class VtIslemleri { static Connection baglanti; //Veritabanına bağlanmak için kullanacağımız baglantiAc metodu public static Connection baglantiAc(){ try { forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); //Konunun başında bahsettiğim derby veritabanına bağlanmak için gerekli bağlantı cümlesi baglanti=DriverManager.getConnection("jdbc:derby:C:\\Users\\Kutlay\\Okul","",""); //DriverManager ile Okul isminde ki veritabanımıza bağlanıyoruz. 2. ve 3. parametre veritabanı kullanıcı adı ve şifresi } catch (Exception e) { e.printStackTrace(); } returnbaglanti; } //Veritabanı işlemlerini hallettikten sonra veritabanını kapatmaya yarayan baglantiKapa metodu public static void baglantiKapa(){ try { baglanti.close(); } catch (SQLException e) { e.printStackTrace(); } } //Öğrenci bilgilerini veritabanından alarak, ArrayList olarak döndüren metodumuz public ArrayList<Ogrenci> ogrenciBilgisiCek(){ ArrayList<Ogrenci> ogrenciBilgileri=new ArrayList<Ogrenci>(); //Çekilen öğrenci bilgilerini tutacağımız bir ArrayList oluşturuyoruz. try { Connection baglanti=baglantiAc(); String sorgu="select * from APP.ogrenci"; //ogrenci tablosundaki tüm verileri çeken sql sorgusu. PreparedStatement ps=baglanti.prepareStatement(sorgu); ResultSet rs=ps.executeQuery(); //Veritabanından çekilen verileri resultsete doldurduk. while (rs.next()) { Ogrenci ogr=new Ogrenci(); //Öğrenci nesnesi oluşturduk. ogr.setOgrNo(rs.getInt("ogrnum")); ogr.setIsim(rs.getString("isim")); ogr.setSoyIsim(rs.getString("soyisim")); ogr.setdYeri(rs.getString("dyeri")); //ogr nesnemize resultsetten gelen verileri doldurduk. ogrenciBilgileri.add(ogr); } //While döngüsü ile ResultSetteki verileri başta oluşturduğumuz ArrayListe aktardık. ps.close(); rs.close(); baglantiKapa(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } returnogrenciBilgileri; //Öğrenci verilerini doldurduğumuz ArrayListi return ile döndürüyoruz. } //Gönderilen öğrenci nesnesini veritabanına kaydeden ogrenciKaydet metodu public boolean ogrenciKaydet(Ogrenci ogrenci){ try { Connection baglanti=baglantiAc(); String sorgu="insert into APP.ogrenci(ogrno,isim,soyisim,dyeri) values(?,?,?,?)"; //ogrenci tablosuna verileri kaydetmeye yarayan sql sorgusu ? ile gösterilen yerler parametreler PreparedStatement ps=baglanti.prepareStatement(sorgu); ps.setInt(1, ogrenci.getOgrNo()); ps.setString(2, ogrenci.getIsim()); ps.setString(3, ogrenci.getSoyIsim()); ps.setString(4, ogrenci.getdYeri()); // 4 tane ? ile gösterilen parametreye değerlerini aktarıyoruz. //Değerleri ogrenciKaydet metodumuza gönderilen ogrenci nesnesinden alıyoruz. ps.executeUpdate(); ps.close(); baglantiKapa(); returntrue; } catch (Exception e) { e.printStackTrace(); returnfalse; } } //Veritabanından öğrenci silmeye yarayan ogrenciSil metodu public boolean ogrenciSil(intogrenciNo){ try { Connection baglanti=baglantiAc(); String sorgu="delete from APP.ogrenci where ogrno=?"; //ogrenci tablosundan ogrno'ya göre veri silen sql sorgumuz PreparedStatement ps=baglanti.prepareStatement(sorgu); ps.setInt(1, ogrenciNo); //Parametre olarak ogrenciSil metoduna gönderilen ogrenciNo'yu kullanıyoruz. ps.executeUpdate(); ps.close(); baglantiKapa(); returntrue; } catch (Exception e) { e.printStackTrace(); returnfalse; } } //Veritabanındaki ogrenci verilerini güncellemeye yarayan ogrenciGuncelle metodu public boolean ogrenciGuncelle(Ogrenci ogrenci){ try { Connection baglanti=baglantiAc(); String sorgu="update APP.ogrenci set isim=?,soyisim=?,dyeri=? where ogrno=?"; //ogrenci tablosundaki verileri güncellemeye yarayan sql sorgusu. ogrno'ya göre güncelleme yapıyor. PreparedStatement ps=baglanti.prepareStatement(sorgu); ps.setString(1, ogrenci.getIsim()); ps.setString(2, ogrenci.getSoyIsim()); ps.setString(3, ogrenci.getdYeri()); ps.setInt(4, ogrenci.getOgrNo()); //Parametreleri ogrenciGuncelle metodumuza gönderilmiş olan ogrenci nesnesinden alıyoruz. ps.executeUpdate(); ps.close(); baglantiKapa(); returntrue; } catch (Exception e) { e.printStackTrace(); returnfalse; } } } |
Selamlar hocam, bu konuyla ilgili bir noktada takıldım. Projemi java db veritabanı ile yaptım ve bitirdim. Clean and build deyip “dist” klasörüne jar olarak alıyorum, yanında lib klasöründe derbyclient de geliyor ancak taşıyabileceğim şekilde veritabanı gelmiyor. Programım hala bilmediğim bir yerdeki veritabanına bağlı kalıyor. Bu konuda bilgi verebilirseniz çok sevinirim. Teşekkürler.
forName(“org.apache.derby.jdbc.EmbeddedDriver”).newInstance();
forName metod eksikligi gösteriyor
Class.forName olarak değiştiriniz.
Mehaba hocam ellerinize sağlık öncelikle. Ben birşey soracaktım chat programı yapacam fakat verilerin kaybolmasını istemiyorum. chat programı tekrar çalıştığında bütün yazışmaların kalmasını istiyorum. Bunu veritabanı kullanarak nasıl yapabilirim? yardımcı olursanız çok memnun olurum.
Veritabanı oluşturma yerinde okul adında veritabanı oluşturalım demişşiniz ama o kod yok orda okul adındaki veritabanını nasıl oluşturacaz
hocam merhaba . javaFx de , C#’daki gibi Dataset olayını araştırırken bi yazınızı buldum ordanda buraya geldim :). ben bu dataset olayını kendimce ObservableLlist ile aştım . siz arraylist ile yapmışsınız . ben açıkçası performans olarak yaptığım Observablelist olayının Performanssız olma korkusu ile araştırmaya başlayıp buralara geldim . soruma gelecek olursam . bu dataset in tek yolu arraylist ile yapmak mı benim yaptığım observablelist olurmu. yada bunlar bi nebze performans gösterir ama Şu Daha iyidir tarzı önerebileceğiniz bi framework varmı . teşekkürler . kolay gelsin.
Hocam veri tabanında kayıtlı kişiyle yeni kaydedeceğim kişiyi karşılaştırıp eğer verileri aynıysa uyarı almak istiyorum. bunu nasıl yapabilirim? teşekkürler
Merhaba, JDBC – MySQL ile çalışan, verileri JTable’da gösteren bir veritabanım var, kayıt ekleme-silme-güncelleme ve arama işlemleri sorunsuz çalışıyor fakat arama sorgusunda aranan değer ile veritabanında eşleşen bir kayıt yoksa hiçbirşey göstermiyor, böyle bir durumda programın “Kayıt Bulunamadı” şeklinde uyarı vermesi için ne yapmalıyım.?
Lütfen yardımcı olurmusunuz.?
Selamlar ,
ben Apache-derby i kuramadım ,veri tabanını nasıl kuracağız. “derby.jar” ı “Build Path” ile dahil etmek sadece mevcut veri tabanına bağlantı kurulmasına olanak mı veriyor ?
Saygılar.