Netbeans, Java, MySQL: Örnek Veritabanı Uygulaması – 1
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
Yorumlar
77 Cevap to “Netbeans, Java, MySQL: Örnek Veritabanı Uygulaması – 1”
Yorum Yaz

Emeklerinize sağlık hocam çok teşekkür ederiz.
Anlatımınız Çok Güzel olmuş.Çok Teşekkürler.Elinize ve ağzınıza sağlık…
ResultSet res = st.executeQuery(“SELECT * FROM kisiler”); //VT’den kayıtları ResultSet’e al
Burada local variable hides field diye bi hata alıyorum ve bağlantı başarısız oluyor çok uğraştım ama nedenini bulamadım cevaplarsan sevinirim
Hata mesajının bir kısmını google’da aratırsanız eminim bir şeyler çıkacaktır. Kaynak kodları indirirdiyseniz bir hata olmaması lazım.
sa / çok hoş alnattınız teşekkür ederiz
Teşekkürler hocam. Çok başarılı bir anlatım çok sağolun.
hakikaten çok güzel bi anlatım olmuş.Teşekkürler..
mrb bende kurulum sırasında en son execute dedikten sonra hata alıorum start service kısmında ama hala problemi çözemedim ne yapabilirim
Sorunu tam olarak anlayamadım. MySQL kurulumunu anlattığım bir video var. Belki o yardımcı olabilir.
s.a hocam bu örnekte “git” butonu çalışmıyor,problemin ne olduğunu söylerseniz sevinirim.
HOCAM BEN MYSQL DE İSME GÖRE ARAMA YAPIP BİLGİLERİ EKRANA YAZDIRMAK İSTİOM SİZ tabloda row ile arama yapmışsınız. res.absolut();
yardımcı olursanız
local variable hides hatası alan arkadas orda demek istenilen senin res nesnen daha önce tanımlanmıs sanırım programın en basında res die bir result set nesnesi tanımlamıssın veri ilerki bir satırda örneğin bir fomksiyonun içinde tekrar res adında bir result set nesnesi tanımlamak istiyrsun cözüm aadı res den baska bişey yaz mesela ressss gibi
onla bi ilgisi yok res.absolut(); res. den sonraki absolut row adresine göre arama yapacaksın dio. ben ise res. dan sonra ne yazmalıyım ki texfiledin içine yazdığım veri ile arama yapsın
hocam acil cevap verirseniz sevinirim
Merhabalar. Bu güzel kaynak için teşekkür ederim.Anlaşılması zaman alacak bir programı çok güzel anlatmışsınız.Devamını bekliyoruz.javadaki report apileri ile ilgili makalenizi bekliyorum.İyi çalışmalar
Çok saolun test ettim hiç bir sorun yok gerçekten iyi bir anlatım olmuş..
Bir şey sorcaktım Form1 e bi buton koyucam basınca form2 açılcak ve form1 disable olcak. form2yi kapatınca yanlız form2 kapancak form1 gene eski haline döncek bunu nasıl yapabilirim..
Frame2′in constructor’ına Frame1′i parametre olarak gönderirsen Frame2 kapanırken tekrar frame1′i çağırabilirsin.
JFrame2 pencere2 = new JFrame2(pencere1); // bu 2 satır kod pencere1′deki buton’a basıldığında çağırılacak.
this.setVisible(false); // birinci pencere kendini görünmez yapıyor
public JFrame1 (JFrame2 parent){ // bu da pencere1′in yapıcı metodu
this.parent = parent;
}
// Kodları doğrudan yazdım ama test etmedim. Neticede ana fikir bu.
hocam süpersin her yerde arayıpta bulamadığımız kaynak ellerin dert görmesin …
Çok fayfali bigiler paylastiğin için tesekkürler…
Hocam elinize sağlık ancak bu kod kısmını videolu olarak anlatma durumunuz yokmu..Kod kısmını yapamadığımız için becermedik. Yada örnek olarak projeyi gönderseniz. Şimdiden çok teşekkür ederiz.
Kodları makalenin sonundan indirebilir ve Netbeans’te proje olarak açıp çalıştırabilirsiniz.
döküman ve videolarınız için teşekkür ederim. Gerçekten işime yaradı.
hocam bütün kodları uygulamamız lazım dimi uygulama derken eklememiz lazım misal driver için add library ondan önceki kodları yapıştırıp çalıştırmamız lazım değil mi?
teşekkürler +rap +respect
Sayın hocam, Javaya yeni başladım. VB C# ile ilgilenmiştim. Verdiğiniz emek ve paylaşım için teşekkürler. Sorum : 1-) MDI form uygulaması olabilir mi?
2-) 300 kullanıcı bir java Desktop uygulaması+ MySQL yaparsak kodların güvenliğini alabilir miyiz?
Kendinize iyi bakınız
hocam tüm kodları incelemek için alabilir miyiiz
teşekkürler hocam ellerinize sağlık
Merhabalar,
Öncelikle yukarıda detaylı açıklamalarınız için teşekkürler.Aşağıda karşılaştığım bir problemi size aktarıyorum.Umarım fazla zamanınızı almam.
Netbeans ortamnında veritabanı(Şuan MySQL) projesi sorunsuz olarak çalışmasına rağmen başka ortamda(hem aynı windows ortamında hem de linux ortamında) Jar dosyası çalışmıyor.Herhangi bir hata da almıyorum.(MySQL Connectoru hem derleme hem de çalışma kısmına ekledim.Yani,orada sorun yok.Projenin oluştuğu pathdeki dist klasöründe hem jar dosyası hem de mysql connector için gerekli ilintiyi görebiliyorum.Ancak Jar dosyası çalışmıyor.).Bu durum ile karşılaştınız mı veya önerebileceğiniz bir çözüm var mı?
Kolay Gelsin.
Öncelikle boş bir desktop uygulaması aç netbeans ile ve pencereye bir buton at. Derle ve jar dosyasını çalıştır. Eğer ekranda pencere görünmüyorsa, jar’ların çalıştırılabilir değil demektir ki çözümünü internetten bulabilirsin. Çalışyorsa muhtemelen veritabanı bağlantısında bir problem vardır. Koddaki try catch bloklarında hata durumunda ekrana bir mesaj kutusu vb. çıkaracak bir kod var mı? Yoksa catch içine bunları yaz ve hatayı görmeye çalış. İlk etapda aklıma gelenler bunlar.
Tekrar Merhaba,
Veritabanı uygulaması dışındaki projelerimin Jar dosyaları normal olarak çalışıyor.Tek sıkıntı Veritabanı ile bağlantılı projelerde.
Verdiğin öneriler için teşekkürler, onları deneyeceğim.
Kolay Gelsin.
Teşekkürler bu değerli paylaşımınız için. Videolu anlatım tabi büyük bir artı…
Tekrar merhabalar,
Daha önce mesajımda(şu an onaylanmadığından görünmeyen mesaj) da belirttiğim gibi sadece veritabanı projelerinin jar dosyalarında çalışmama durumu var(Normal uygulamaların jar dosyaları problemsiz çalışıyor).Try-catch bloklarında herhangi bir hataya rastlayamadım.İlk etaptaki öneriniz dışında bir öneriniz var mı?
Kolay Gelsin.
Benim demek istediğim catch{ } içerisinde eğer kod yok ise, yani boş ise veritabanına hatsını (ya da try içerisindeki kod her ne yapıyor ise) hasır-altı edecektir. Bu yüzden catch içerisinde oluşan bu hatayı kullanıcıya bildiren bir kod olmalı. Örneğin ekrana bir mesaj kutusu çıkabilir. Yanılmıyorsam benim kodlar bu şekilde. Onlara bir bakabilirsiniz. Bunun dışında aklıma gelen bir şey yok ne yazık ki.
Catch içerisinde kullanıcıya hatasını bildiren “hata mesaj kutusu” boş olarak geliyor.
(Tamamen boş bir frame olarak düşün.)
Önerilerin için teşekkürler.
Kolay Gelsin.
hocam elinize sağlık gerçekten çok iyi bilgilendirmişsiniz…
Merhaba,
Ben Netbeans üzerinden MySQL’e bağlanmak istiyorum.Ancak ” ERROR 1045 : Access denied for user ‘@’localhost’ (using password: NO)” mesajını alıyorum.Bu sorunu nasıl çözebilirim?
Mysql kullanıcı adınızı ve şifrenizi doğru girmeniz gerekiyor. Varsayılan olarak kullanıcı adı root, şifre kısmı ise boştur.
s.a hocam dersler çok güzel elleriniz sağlık.
yukarıdaki örneği uygularken türkçe karekter problemi yaşıyotum bunun sebebi sizce nedir?
MySQL’deki veritabanın türkçe ya da unicode olarak tanımlı mı?
yukarıda verdiğiniz adımları izleyerek netbeans içinde veritabanı ve tablomu oluşturdum mysql üzerinde herhangi bir ayar yapmadım. Mysql içinde ayrı bir ayar yapmam gerekiyor mu ?
hocam sorun benden kaynaklanıyor yanlış mysql paketini kurmuşum mysql kurulumu ile ilgili video izlediğimde farkettim teşekkür ederim
sayın hocam vs c# daki datagridwiev deki gibi netbeans da kullanabileceğimiz bir nesne var mı?
Çok teşekkür ederim. Ne kadar yardımcı oldugunuzu tahmin edemezsiniz
Hocam eline saglık fakat MYSQL yerine Easy Php ile veri tabanı yapmak daha kolay ben bunu kullanıyorum çokkolaylıgı car apachi,php server ve mysql içinde tek paket aklınızda bunnsun kolaylık sağlar
hocam merabalar,
veritabanıyla yapılan projeleri jar ladığımız zaman benim bilgisayarımda program çalışıyor sorunsuz olarak ancak jar dosyasını başka bir bilgisayara attıgım zaman çalışmıyor. Yani demek istediğim database i proje içine nasıl gömeceğiz. Kullanıcı database i kendi bilgisayarına kurmadan direk programı çalıştırdığı zaman kullanılabilir hale nasıl getirebiliriz.
Bunun için SQLite gibi sunucu gerektirmeyen bir veritabanı kullanman gerekiyor. MySql ile mümkün değil.
merhabalar.ben Mysql i kurum aşamasında en extcute diyorum start services te takılıyo program yanıt vermiyo.kapatıp programlardan baktığımda mysql kurulu görünüyo ama yönetimsel araçlar/hizmetlerden mysql i başlatmak istediğimde başlatamıyor.sorun nedir acaba…
ha bu arada işletim sistemim w 7.xp ye kurdum çalışıyo sanki başka bir program hizmetlerin başlamasını engelliyo gibi ???
Mysql’in kullandığı port 3306 başka bir hizmet tarafından kullanılıyor olabilir. Hizmetin neden başlatılamadığına dair bir hata mesajı olmalı bir yerlerde. Mesela sistem olayları log’unda. Onu bulup google’da aratın. şu anda ilk aklıma gelen bu.
hocam ellerineze saglik, cok faydali bir calisma olmus. Boyle calismalarin devamini dilerim..:)
Mysql i birkere kurup kaldırınca c: de data klasörü silinmiyormuş.Tekrar kurmadan önce bu klasörü manüel olarak silmek lazımmış.silinmediği takdirde mysql kurulumunda start services te takılıp kalıyo
birinci pencereden bir kisinin ismini ve sifresini girdiginde ikinci pencerede veri tabanindan(Mysql) o kisiye ait bilgileri nasil goruntuleyebiliriz.
elinize emeğinize sağlık hocam gerçekten güzel bi anlatım olmuş bi teşekkürü çok görmemek lazım
Merhaba, ben de java’yı yeni yeni öğrenmeye başladım. Sitedeki kaynaklar gerçekten çok faydalı. Arkadaşlar gibi ben de rica etsem, eğer proje mevcutsa, onu da alabilir miyiz? Hangi sınıfta, hagi kodun yazıldığını tam olarak çıkartamadım açıkcası.
Kodları indirmek için gerekli link makalenin sonunda mevcut. Sitedeki derslerle ilgili tüm kodlar herkese açık.
çok iyi
aa evet gözümden kaçmış.. tekrar teşekkürler..
hocam row’a göre deilde isme/diğer satırlara göre sorgulama/arama yapmak için ne yapmamız gerekio ?
Row’a göre değil Id kolonuna göre arama yapıyoruz. Çünkü bulan birincil anhtar veritabanında. Sonra da bu Id değerinin bulunduğu satırı (row’u) siliyoruz/güncelliyoruz.
hocam Statement ifadesinin ne işe yaradığından bahsede bilir misiniz?
Statement st; // SQL komutumuz için
st = baglantiAc(); //veritabanına bağlanılıyor
————————————————
public Statement baglantiAc()
Hocam ben Java + Accesste sozlük yapıyordum. Ne yazık ki jList Turkçe harfleri tanımıyor. Utf-8 kullandım , ama bir türlü yapamadım . Yardımınızı bekliyorum , teşekkür ederim.
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();
Properties props = new Properties();
props.put(“user”,”");
props.put(“password”,”");
props.put(“Encoding”, “utf8″);
props.put(“CharSet”, “utf8″);
Connection connection = DriverManager.getConnection(“jdbc:odbc:WORDS”,props);
Turkçe ı,ğ,ü,ş,ç,ö bu harfleri tanımıyor onların yerine soru (?) işareti geliyor
Yazıdaki Veritabanına Bağlantı bölümüne dikkat edin:
private String properties= “?useUnicode=true&characterEncoding=utf8″; //Türkçe karakter problemi yaşamamak için
private String properties= “?useUnicode=true&characterEncoding=latin1″;
şeklinde kullanabiliyormuyuz yoksa latin1 için nasıl bir kod yazacağız.
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?
Uygulama bir sunucuda çalşıyor ve sen başka bir bilgisayar ile web üzerinden mi bağlanıyorsun?
ya hocam video açılmıyo indirme linkini tıkladıgımda ise böyle bi video bulunamadı diyo ne yapmam gerekiyo?
video indirme bağlantısı güncellendi
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
http://www.hrzafer.com/java-swing-pencerler-arasi-iletisim
videolar açılmıyor,dün açılıyodu
video açılmıyor lütfen tekrar upload edermisin
Videonuz çalışmıyor
indirme linki düzeltildi
indirme linki düzeltildi
detaylı ve hiç bi ayrıntıyı atlamadan yapmıs oldugunuz uygulama için tesekkürlerimi sunarım
ben bu projeleri açamıyorum acil gerekli