JDBC Nedir ?

Selamlar , 

   Java Database Connectivity, Java programlama dilinde yazılmış uygulamaların veritabanı ile etkileşime girmesini sağlayan bir uygulama programlama arayüzüdür. JDBC ile hemen hemen tüm ilişkisel veri tabanı yönetim sistemlerine SQL sorgusu gönderilebilmektedir. 

    Günümüzde ORM toolları kullanımı çok daha yaygındır. Bunun yanı sıra  yandaki grafikte(1.0) görüldüğü üzere JDBC kullanımıda hala bir çok kişi tarafından tercih edilmeye devam etmektedir. ORM database ile entity arasında mapping işlemine denir. Bu mapping işlemini yapan ORM toolları mevcuttur. Bunlardan bazıları JPA,JDO,HİBERNATE gibi..

    Peki bu kadar işi kolaylaştıran toolar mevcut iken neden JDBC kullanılmaktadır. JDBC kullanımının tercih edilmesinin en büyük etkeni bütün yetkinin developer tarafında olmasıdır. Yani bir connection açılacak ve kapatılacak ise istenilen kısımda connection açılıp istediğin yerde kapatılabilir. Ve transaction yönetiminde ise, bu kısımda transaction.commit yap eğer try içine girmezse catch kısmın da şurada transaction.rollback yap diye tamamen sizin tasarımınıza olanak sağlayan bir kullanımdır. Yinede bu avantajaları yanı sırasında yandaki grafikteki(2.0) bütün işlemleri manuel olarak yapmak zorunda kalacak ve büyük bir iş yükü altında kalacaksınızdır. Ve unutulan ufak bir durumda projenin genelinde büyük bir işme ve patlama gerçekleşecektir.

1.0

2.0

JDBC Mimarisi

 İki katmandan oluşur.

  1. JDBC API: Uygulama ile JDBC Yöneticisi bağlantısını sağlar.
  2. JDBC Driver API: JDBC Yöneticisi ile Sürücü Bağlantısını destekler. Aşağıdaki mimari diyagram, JDBC sürücüleri ve Java uygulaması ile ilgili sürücü yöneticisinin yerini göstermektedir

Bu katmanlı mimari aşağıdaki şemada gösterilmiştir.

JDBC Driver Çeşitleri 

4 tip JDBC Driver çeşidi vardır.Protokollere göre ve donanımsal ihtiyaca göre değişkenlik göstermekte. 

Tip 1 – JDBC-ODBC Bridge

Microsoft Open Database Connectivity ile JDBC arasında ki bağlantıyı sağlayan çeşididir. Bu bağlantının gerçekleştirilebilmesi için ODBC’nin mutlaka yüklü olması gerekmekte.

Tip 2 – JDBC-Native API

Bu bağlantı çeşidi veritabanı kütüphanesinde yer alan ilgili API ye dönüştürülerek sağlanır.

Tip 3 – JDBC-Network 

3 Katmanlı sürücüdür. Sürücülere bağlanmak için özel protokoller bulunur. Birçok veritabanına erişim sağlanabilmektedir. Bu bağlantıya farklı katmanları nedeniyle çeşitli özellikler eklememiz mümkün olmaktadır. Örnek olarak önbellekleme, denge yükleyici gibi

Tip 4 – Native – Protokol

Platform bağımsız olarak çalışan tiptir. Her veritabanı için ayrı bir sürücüye ihtiyaç vardır.  Özel bir yazılım gereksinimi olmadan çalışabilir. Yüksek performanslıdır.

Örnek JDBC bağlantısı

Maven tabanlı uygulamanız mevcut ise aşağıdaki database driver‘ları kullanabilirsiniz.

<dependency> 
<groupId>mysql</groupId> 
<artifactId>mysql-connector-java</artifactId> 
<version>5.0.5</version> 
</dependency> 

<!-- You need to install ojdbc6 jar manually to your maven repository --> 
<dependency> 
<groupId>com.oracle</groupId> 
<artifactId>ojdbc6</artifactId> 
<version>11.2.0.1.0</version> 
</dependency>

JDBC Database Configuration Property File

Özellik dosyalarından veritabanı yapılandırma ayrıntılarını okuyacağız. Bu, Oracle’dan MySQL veritabanına kolayca geçiş yapmamıza yardımcı olacaktır.

#mysql DB properties !!
//DB_DRIVER_CLASS=com.mysql.jdbc.Driver 
//DB_URL=jdbc:mysql://localhost:3306/TestDB 
//DB_USERNAME=Alpay
//DB_PASSWORD=Alpay123 

#Oracle DB Properties  !!
DB_DRIVER_CLASS=oracle.jdbc.driver.OracleDriver 
DB_URL=jdbc:oracle:thin:@localhost:1571:MyTestDB
DB_USERNAME=Alpay
DB_PASSWORD=Alpay321

JDBC ÖRNEK PROGRAM

import java.io.FileInputStream; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.Properties; 

public class DBConnection { 
public static Connection getConnection() { 
Properties props = new Properties(); 
FileInputStream fis = null; 
Connection con = null; 
try {
fis = new FileInputStream("db.properties"); 
props.load(fis); 

// Driver Class Yükleniyor.
Class.forName(props.getProperty("DB_DRIVER_CLASS")); 

//Bağlantı oluşturuluyor.
con = DriverManager.getConnection(props.getProperty("DB_URL"), 
props.getProperty("DB_USERNAME"), 
props.getProperty("DB_PASSWORD"));
 } catch (Exception  e) { 
e.printStackTrace();
 } return con;
 } 
}

Bilgi paylaştıkça artar, paylaşarak destek ol.