Singleton tasarım deseni en çok kullanım alanlarından biride veritabanı bağlantılarıdır. Veritabanı bağlantısı açmak içi sürekli nesne yaratmak kaynak tüketimini arttıracaktır. Buda sistemde yavaşlama ve çeşitli aksamalara neden olacaktır. Sistem kaynaklarımızı verimli tutmak için Singleton Tasarım Deseni yapısını kullanarak veritabanı bağlantımızı yapabilir ve sorgularımızı gerçekleştirebiliriz. İşlemimize başlamadan önce çalışma dosyanıza Mysql JDBC Connector jar dosyasını eklemeyi untmayın. Yoksa veritabanı bağlantınız çalışmayacaktır.
Aşağıda ilk olarak Personel sınıfımızı oluşturduk. Sınıfımızda ad ve soyad fieldleri bulunmaktadır. Bunlara ait değerleri set ve get metotları ile atayp çekebileceğimiz. Bunda ki amacımız veritabanına ait sorguad çekilen her veri Personel sınnıfına ait bir nesnede tutulması ve çekilmesidir.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package SingletonDatabaseConnectionOrnek; public class Personel { String ad; String soyad; public void setAd(String ad){ this.ad=ad; } public String getAd(){ return ad; } public void setSoyad(String soyad){ this.soyad=soyad; } public String getSoyad(){ return soyad; } } |
Aşağıdaki SignletonDBConnection sınıfımız ile veritabanı bağlantımızı Singleton Tasarım Şablonu yöntemi sayesinde tek bir nesne üzerinden açmamızı sağlıyoruz. Daha sonrasında getPersonelList metodu ile veritabanımızdan Ad ve Soyad sütunlarına ait bilgileri çekiyoruz.
|
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 |
package SingletonDatabaseConnectionOrnek; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class SingletonDBConnection{ private static SingletonDBConnection instance=null; private SingletonDBConnection(){ } public static SingletonDBConnection getInstance(){ if(instance==null){ synchronized (SingletonDBConnection.class) { if (instance==null) { instance=new SingletonDBConnection(); } } } return instance; } public Connection getConnection(){ Connection dbConn=null; try{ Class.forName("com.mysql.jdbc.Driver");//hangi veritabanı türü ile çalışacağımızı tanımlıyoruz dbConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","veritabani_kullanici_adi","sifre");//veri tabanına ait host ve veritabanı adını ve veritabanına ulaşacak olan kullanıcı adı ve şifresini tanımlıyoruz }catch(SQLException e) { System.err.println(e.getMessage()); }catch(ClassNotFoundException e){ System.err.println(e.getMessage()); } return dbConn; } public List<Personel> getPersonelList(){ List<Personel> listPersonel=new ArrayList<Personel>(); Connection conn = null;//veritabanı bağlantısı sağlar PreparedStatement stmt = null;//veritabanı sorguları yapmamızı sağlar ResultSet rs = null;//sorgu sonuçlarını tutar String query="Select AD, SOYAD FROM Personel";//veritabanı sorgumuz try { conn=getConnection();//veritabanı bağlantısını açar stmt = conn.prepareStatement(query);//sorgu işlemini gerçekleştirir rs=stmt.executeQuery();//sorgu sonucu gelen verileri tutar while (rs.next()) {//gelen her veriyi Personel personel=new Personel();//personel sınıf deişkenini oluştur personel.setAd(rs.getString("AD"));//ilgili satırın AD sütununa ait veriyi personel sınıfının ad deişkeninde tut personel.setSoyad(rs.getString("SOYAD"));//ilgili satırın SOYAD sütununa ait veriyi personel sınıfının soyad değişkeninde tut listPersonel.add(personel);//sınıfı listeye ekle } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(conn!=null){ try {//bağlantıları kapat conn.close(); stmt.close(); rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } return listPersonel; } } |
Yapmış olduğumuz bu sınıfları test etmek için aşağıda ki Test sınıfını oluşturarak Singleton Tasarım Deseni kurallarına uyarak veritabanı bağlantımızı sağlıyoruz.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package SingletonDatabaseConnectionOrnek; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List<Personel> personelTest =new ArrayList<Personel>(); personelTest=SingletonDBConnection.getInstance().getPersonelList(); System.out.println(personelTest.get(0).getAd() +" " + personelTest.get(0).getSoyad()); } } |
Ekran Çıktısı
İndirmek İçin: GitHub – Onur ARSLAN





