Bu makalede Netbeans, Java ve MySQL ile basit bir veritabanı uygulaması gerçekleştireceğiz. Uygulama basitçe bir tabloya kayıt ekleme, silme ve tablodan kayıt getirme işlemleri yapacak. Bunları yaparken Java Swing paketini kullanarak basit bir görsel arayüz de kullanacağız.
Öncelikle sistemimizde NetBeans + JDK ve MySQL kurulu olması gerekiyor. Daha sonra NetBeans ile MySQL bağlantısını yapmamız ve uygulamada kullanacağımız örnek veritabanının oluşturmamız gerekiyor. İşin bu kısmını görünlütü olarak anlatmak daha kolay olacağından aşağıdaki videoyu hazırladım. Videoyu izledikten sonra devamında kodlar ve açıklamalar var. Yazının sonunda ise kaynak kodların tamamını indirebilirsiniz.
Not: Videoyu izlemekte problem yaşıyorsanız, buradan indirebilirsiniz.
Örnek veritabanı için gerekli kodlar aşağıdaki gibidir:
Veritabanını oluşturmak için:
CREATE DATABASE IF NOT EXISTS vt; USE vt;
Kisiler Tablosunu oluşturmak için:
DROP TABLE IF EXISTS `kisiler`; CREATE TABLE `kisiler` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `Ad` VARCHAR(45) NOT NULL, `Soyad` VARCHAR(45) NOT NULL, `Yas` INT(10) UNSIGNED NOT NULL, `Cinsiyet` tinyint(3) UNSIGNED NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
Kisiler Tablosuna örnek kayıtları eklemek için:
INSERT INTO `kisiler` (`id`,`Ad`,`Soyad`,`Yas`,`Cinsiyet`) VALUES (1,'Harun Reşit','Zafer',27,1), (2,'Derya','Deniz',24,0), (3,'Emir','Aydın',33,1), (4,'Levent','Denizeri',25,1), (5,'Abbas','Yolcu',25,1);
Veritabanına Bağlantı
private Connection conn = null; //Bağlantı nesnemiz private String url = "jdbc:mysql://localhost:3306/";//veritabanının adresi ve portu private String dbName = "vt"; //veritabanının ismi private String properties= "?useUnicode=true&characterEncoding=utf8"; //Türkçe karakter problemi yaşamamak için private String driver = "com.mysql.jdbc.Driver";//MySQL-Java bağlantısını sağlayan JDBC sürücüsü private String userName = "root"; //veritabanı için kullanıcı adı private String password = ""; //kullanıcı şifresi private ResultSet res; // sorgulardan dönecek kayıtlar (sonuç kümesi) bu nesne içerisinde tutulacak
Yukarıdaki kodda driver isimli değişken önemli. Bu sürücüyü projemize eklememiz gerekiyor. Bunun için resimde gördüğünüz “Libraries” düğümünün üzerine sağ tıklayıp “add library” deyip, açılan pencereden MySQL JDBC Driver’ı seçin ve “Add Library” butonuna tıklayın.
Bu sürücüyü projemize dahil etmeden, programımızın çalışmayacağını hatırlatalım.
Aşağıdaki fonksiyonlar bağlantı açmak ve kapamak için kullanılıyor. Dikkat ederseniz yukarıdaki değerleri aşağıda kullanıyoruz.
public Statement baglantiAc() throws Exception { Class.forName(driver).newInstance(); conn = DriverManager.getConnection(url + dbName + properties, userName, password);//bağlantı açılıyor return conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); //return conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); }
Yukarıda ResultSet.CONCUR_UPDATABLE yerine ResultSet.CONCUR_READ_ONLY yazarsak veritabanı salt okunur olarak açılır. Bu durumda kayıtları okuyabiliriz ama kayıt ekle/sil/güncelle işlemlerini yapamayız.
public void baglantiKapat() throws Exception { conn.close(); }
Yukarıdaki fonksiyon da bağlantıyı kapatıyor.
Kayıtların Tablodan Alınması
st = baglantiAc(); //veritabanına bağlanılıyor res = st.executeQuery("SELECT * FROM kisiler"); //tablodaki kayıtlar getiriliyor
Yukarıdaki sorgunun sonuç kümesi (bu sorgu için tablonun tamamı) res isimli ResultSet nesnesine aktarılıyor. Bu işlem bir kere programın başında yapılıyor. Programın geri kalanında hep res isimli ResltSet nesnemizi kullanarak veritabanı işlemlerini gerçekleştireceğiz.
Kayıtların Metin Kutularına Yazılması
res.next(); //tablonun ilk kaydını göster. adTextField.setText(res.getString("Ad")); soyadTextField.setText(res.getString("Soyad")); yasTextField.setText(res.getString("Yas")); if(res.getInt("Cinsiyet")==1){ cinsiyetComboBox.setSelectedIndex(0); } else{ cinsiyetComboBox.setSelectedIndex(1); }
Kayıtlar Arasında Gezinme
res.next() komutu ilk defa kullanıldığında res nesnesinin barındırdığı tablonun ilk kaydına (satırına) gelinir. Daha sonra her res.next() komutu ile bir sonraki kayıda gidilir.
ResultSet nesnesinin ilgili diğer metodları aşağıdaki gibidir:
res.previous(); // bir önceki kayıta git res.first(); //ilk kayıta git res.last(); //son kayıta git res.absolute(3); //3. kayıta git.
Kayıt Ekleme
res.moveToInsertRow(); //Kaydın ekleneceği yeni satıra git res.updateString("Ad", adTextField.getText()); //"Ad" alanına metin kutusuna girilen değeri ekle res.updateString("Soyad", soyadTextField.getText()); //"Soyad" alanına " " " res.updateInt("yas", Integer.parseInt(yasTextField.getText()));//"yas" alanına " " " boolean cns; if (cinsiyetComboBox.getSelectedIndex()==0){ cns=true; } else { cns=false; } res.updateBoolean("cinsiyet",cns); //cinsiyet alanına 1 veya 0 değeri ekleniyor res.insertRow(); //Kaydı (satırı) tabloya ekle
Kayıt Güncelleme
Kayıt eklemeye çok benzediğinden bir daha burada eklemedim. Kodları indirdiğinizde görebilirsiniz.
Kayıt Silme
res.deleteRow();
Görüldüğü gibi oldukça basit. O an üzerinde bulunulan kaydı (satırı) siliyor.
Programın Genel Akış Mantığı
Programın koduna dikkat ederseniz veritabanı bağlantısının program başlarken baglantiAc() ile 1 kere yapıldığını, program sonlanana kadar açık kaldığını ve program kapanırken, bağlantının da baglantiKapat() ile kapatıldığını göreceksiniz. Bir diğer göze çarpan husus ise ekle/güncelle/sil gibi komutlar için bildiğimiz INSERT/UPDATE/DELETE gibi SQL komutlarının kodda yer almaması. Bu kodlar geri planda çalıştırılıyor.
Peki neden bağlantıyı yalnızca bir defa açıp kapamak için iki metod yazdık?
Bunun cevabını bir sonraki örnekte anlayacağız. O örnekte SQL komutlarını bizzat kendimiz yazıp kullanırken, her veritabanı işlemi için bağlantıyı açıp işlem bittikten hemen sonra bağlantıyı kapatacağız.
Peki ama hangi yaklaşım daha iyi? Elbette 2. örneği de görüp anlamadan bu soruya cevap aramak anlamsız.
Kodların tamamını NetBeans projesi olarak buradan indirebilirsiniz.
Not: Yaklaşık 1,5 yıl sonra kodda bir hata (Türkçe karakter problemi) farkettim ve yukarıdaki koda “properties” adında bir string daha ekledim. Bu değişikliği kodların bulunduğu proje dosyasında yapmadım. Bunu da ödev olarak size bırakıyorum 🙂
17 Temmuz 2012 at 00:35
private String properties= “?useUnicode=true&characterEncoding=latin1″;
şeklinde kullanabiliyormuyuz yoksa latin1 için nasıl bir kod yazacağız.
11 Ekim 2012 at 05:10
Hocam Merhaba,
Ben bir uygulama yaptım suan apache üzerinde çalışıyor ve mysql kullanıyorum.Ben kendi bilgisayarımda uygulamada ekleme ve edit işlemlerini yapabiliyorum ama başka bilgisayarda bu işlemleri yapmıyor.İşlem başarılı diyor ama kaydetmiyor.Log lara baktım ekleme işlemi ile ilgili hiçbir kayıt yok.Sizce neden kaynaklanıyor olabilir?
11 Ekim 2012 at 07:47
Uygulama bir sunucuda çalşıyor ve sen başka bir bilgisayar ile web üzerinden mi bağlanıyorsun?
21 Aralık 2012 at 07:46
ya hocam video açılmıyo indirme linkini tıkladıgımda ise böyle bi video bulunamadı diyo ne yapmam gerekiyo?
05 Ocak 2013 at 09:18
video indirme bağlantısı güncellendi
29 Ocak 2013 at 11:26
bir formum var elimde ve butona basınca başka bir formu çağıracak bir türlü yapamadım…( form1 butona basılınca form2 yi çağıracak ve form2’de işlemler bitmeden form1 e tıklanmayacak değişmeyecek
30 Ocak 2013 at 06:16
http://www.hrzafer.com/java-swing-pencerler-arasi-iletisim
16 Mart 2013 at 14:56
videolar açılmıyor,dün açılıyodu
18 Mart 2013 at 04:37
indirme linki düzeltildi
17 Mart 2013 at 11:22
video açılmıyor lütfen tekrar upload edermisin
17 Mart 2013 at 16:11
Videonuz çalışmıyor
18 Mart 2013 at 04:36
indirme linki düzeltildi
02 Nisan 2013 at 08:29
detaylı ve hiç bi ayrıntıyı atlamadan yapmıs oldugunuz uygulama için tesekkürlerimi sunarım
16 Mayıs 2013 at 15:29
ben bu projeleri açamıyorum acil gerekli 🙁
08 Eylül 2013 at 05:48
Hocam Allah sizden razı olsun . Ne kadar işime yaradıgını anlatamam size
18 Aralık 2013 at 14:22
video izlenemıyor
26 Aralık 2013 at 00:56
indirme linkini yeniledim. ilk fırsatta videoları da youtube ortamına aktaracağım.
01 Ocak 2015 at 02:47
merhaba elinize sağlık, buna birde table ekleyebilir misiniz
09 Ocak 2015 at 20:57
Hocam projenin indirme linki kırık. Bi kontrol edebilir misiniz?
05 Şubat 2015 at 14:23
İndirme linkini güncelleyebilirmisiniz
17 Şubat 2015 at 03:21
link güncellendi
05 Mayıs 2015 at 12:17
Merhaba. Pencereyi hazırladınız videodersin linkini gönderebilir misiniz?
09 Aralık 2015 at 02:57
Kodların yazıldığı yerler nersi onlşarıda gösterebilme şansınız varmı acaba ?
09 Aralık 2015 at 04:51
Kodlar Netbeans’de yazıldı. Ama her hangi bir Java IDE’si yeterli olur.
11 Haziran 2020 at 06:54
Günlerce uğraştığım veri tabanına bağlantı işlemini detaylı ve çok güzel anlatmışsınız. Ellerinize sağlık. Ekleme kısmında hata alıyorum sürekli fakat benden kaynaklı bir sıkıntı galiba.
çok teşekkür ederim. emeğinize sağlık