# Java Database Connectivity (JDBC)
JDBC, Java diliyle veri tabanlarına baÄlanıp sorgu çalıÅtırmak, veri tabanı ile etkileÅimli uygulamalar geliÅtirmek için ortaya çıkmıŠbir kütüphanedir.
Java Standard Edition (JavaSE) içinde yer almaktadır. Dolayısıyla JDK içinde varsayılan olarak hazır kullanılabilir Åekilde gelmektedir.
JDBC API her veri tabanı yönetim sistemi için yazılmıŠolan sürücü kütüphanelerini kullanarak veri tabanı iÅlemlerini yapabilmeyi saÄlar. Veri tabanıyla
iletiÅimde kullanılabilecek birçok baÅka soyutlama olmasına karÅın JDBC bunların hepsinin temelinde bulunur. Bu nedenle JDBC'nin standartını öÄrenmek önemlidir.
Java ile veri tabanı ile etkileÅimde olan kodları yazdıÄınızda sürücü kütüphane örneÄin MySQLâden Oracle veri tabanı sistemine geçse bile hiçbir deÄiÅiklik gerektirmeden
kullanımını saÄlar. Böylece, Java ile veri tabanıyla iÅlemler yapabilmek için yazdıÄınız kodları deÄiÅtirmeden dilediÄiniz veri tabanı sistemiyle çalıÅabilirsiniz.
Böyle yüksek bir soyutluluk saÄlaması Java kodlarının yeniden kullanılabilirliÄini arttırmaktadır. JDBC API ile veri tabanı baÄlantısı oluÅturup, tablolar üzerinde
sorgu çalıÅtırabilirsiniz. Sorgulama, veri güncelleme, silme veya yeni kayıt ekleme iÅlemlerini yapabilirsiniz.

## 5 Adımda JDBCâyi Kullanmak
JDBC ile veritabanı etkileÅimi kabaca 5 adımdan oluÅmaktadır.
1-Veri tabanı sürücü sınıfını kaydetmekle baÅlayabiliriz. JDBC API hangi veri tabanı sürücüsüyle çalıÅacaÄını bilmelidir. Bu nedenle yazılımı gerçekleÅtirirken bu bilgiyi belirtmek gerekir.
```
Class.forName("com.mysql.jdbc.Driver");
```
Class sınıfındaki âforNameâ fonksiyonu ile hangi veri tabanı sürücüsünü kullanacaÄımızı belirtiyoruz. ÃrneÄin burada âMySQLâ sürücüsünü kullanacaÄımızı söylemiÅiz.
2-Sürücü sınıf belirlendikten hemen sonra veri tabanı baÄlantısı kurulur. Modern veri tabanı yönetim sistemlerinin istemci-sunucu (client-server) mimarisinden oluÅtuÄunu bahsetmiÅtik.
```
Connection dbConnection = DriverManager.getConnection(
"jdbc:mysql://remotemysql.com:3306/S9HHYQdP81?useSSL=false", "S9HHYQdP81", "7mR2jSrEgT<Åifre>");
```
DriverManager sınıfındaki âgetConnectionâ fonksiyonu ile veri tabanına bir baÄlantı açarız. Bu fonksiyona uzak bir sunucuda yer alan veri tabanı sunucu adresimizi vereceÄiz. Bu adres IP ve Hostname Åeklinde olabilir. Burada âremotemysql.comâ sunucusundaki MySQL sunucusuna baÄlanacaÄımı söylüyorum. Ardından, baÄlantı kuracak kullanıcının, kullanıcı adı ve Åifresini veriyorum. Böylece, veri tabanı sunucusuna bir baÄlantı açmıŠoluyorum.
3-BaÄlantı kurulduktan sonra JDBC API ile artık sorgu çalıÅtırabiliriz.
```
Statement statement = dbConnection.createStatement();
```
âdbConnectionâ isimli nesne veri tabanı sunucusuyla aramızdaki baÄlantı nesnesidir. Bu nesne üzerinden âcreateStatementâ fonksiyonu ile sorgu hazırlayabileceÄimiz âStatementâ tipinde bir nesne alırız. SQL sorgumuzu bu sorgu üzerinden yapacaÄız.
4-Sorgu nesnemiz hazır olduÄu için bir SQL ifadesi hazırlayıp veri tabanı sunucusunda bu sorgu iÅletilir ve sorgu sonucu âResultSetâ tipinde bir nesne ile geri döndürülür.
```
ResultSet resultSet = statement.executeQuery("select * from employees");
while(resultSet.next())
{
System.out.println(resultSet.getInt(1) + " " + resultSet.getString(2));
}
```
âexecuteQueryâ fonksiyonu ile veri tabanı sunucusuna basit âSELECTâ sorgusu attık. Bunun sonucunda âResultSetâ tipinde bir nesnede veri tabanından dönen kayıtlar geldi. Bu kayıtları bir âwhileâ döngüsü ile iÅletip eriÅebiliriz. ânextâ fonksiyonu her çaÄrıldıÄında sonuç kümesinden bir satır kayıt getirir. Bu satır üzerindeki sütunlara indis yoluyla veya direkt sütun isimlerini vererek eriÅlebiliriz.
5-İÅimiz bitince veri tabanı sunucu ile olan baÄlantımızı kapatırız.
```
dbConnection.close();
```
âConnectionâ tipindeki sınıftan bir nesne ile veri tabanı baÄlantımızı oluÅturmuÅtuk. Aynı Åekilde bu nesne üzerindeki âcloseâ fonksiyonu ile baÄlantıyı kapatıyoruz.

##Sorular
**Soru 1** AÅaÄıdakilerden hangisi veri tabanında sorgu çalıÅtırma adımlarından birisi deÄildir?
A) Sürücü sınıfını kaydetmek
B) Bir connection almak
C) Statement oluÅturmak
**D) Rollback yapmak**
E) Connectionu kapatmak
----------
I. Statment oluÅturmak.
II. Connection almak.
III. Statment'ı execute etmek
IV. Driver'ı kaydetmek
V. Connection'ı kapatmak
**Soru 2** Yukarıdakileri doÄru sıraya sokarak bir sorguyu iÅletiniz.
A) I-II-III-IV-V
B) IV-I-II-III-V
**C) IV-II-I-III-V**
D) IV-V-I-II-III
E) V-IV-III-I-II
## Kaynak:
* [Figure 1](https://www.simba.com/resources/jdbc/)
* [Figure 2](https://ducmanhphan.github.io/2020-01-09-How-to-use-JDBC-to-connect-database-in-Java-project/)