Java, Java Yazılım Geliştirme Kiti’nin (SDK) bir parçası olarak Java Veritabanı Bağlantısını (JDBC) sağlar. Bu API‘i kullanarak, ilişkisel bir veritabanına bağlanmak ve kayıtları sorgulama, ekleme, güncelleme ve silme gibi ortak işlemleri yapmak çok kolaydır.

Çekirdek (core) JDBC API‘si Java‘ya dahil olsa da, MySQL veya SQL Server gibi belirli bir veritabanına bağlanmak, veritabanı sürücüsü olarak bilinen ek bir bileşen gerektirir. Bu veritabanı sürücüsü, çekirdek JDBC çağrılarını bu veri tabanı tarafından anlaşılan bir biçimde çeviren bir yazılım bileşenidir.

Bu makalede, bir MySQL veritabanına bağlanmanın ayrıntılarına ve birkaç sorguyu onunla nasıl gerçekleştirileceğimize göz atacağız.

MySQL Veritabanı Sürücüsü

Yukarıda açıklandığı gibi bir Web Tasarım MySQL veritabanına bağlanmak için JDBC sürücüsüne ihtiyacınız vardır. Buna Connector/J sürücüsü denir ve MySQL‘in sitesinden indirilebilir. (linki: https://dev.mysql.com/downloads/connector/j/5.1.html)

ZIP (veya TAR.GZ) dosyasını indirdikten sonra arşivi çıkarın ve JAR dosyasını mysql-connector-java-bin.jar dosyasını uygun bir yere kopyalayın. Bu dosya, MySQL JDBC Sürücüsünü kullanan herhangi bir kodu çalıştırmak için gereklidir.

Örnek Veritabanı Oluşturma

MySQL veritabanını indirdiğinizi ve veritabanınıza eriştiğiniz yerde onu düzgün bir şekilde kurduğunuzu varsayalım. Sorgu bağlamak ve gerçekleştirmek için MySQL veritabanını kullanabilmemiz için örnek bir veritabanı oluşturalım.

İstediğiniz bir istemci kullanarak veritabanına bağlanın ve örnek bir veritabanı oluşturmak için aşağıdaki ifadeleri çalıştırın:

create database sample;

Ayrıca veritabanına bağlanmak için bir kullanıcı adı ve şifreye ihtiyacımız var genellikle kötü bir fikir olan yönetici olarak bağlanmak istemiyorsanız tabi.

Aşağıdaki, testuser kullanıcısını, securepwd şifresini kullanarak çalıştırdığı makineden (localhost ile gösterilir) MySQL veritabanına bağlanacak bir kullanıcı oluşturur:

create user ‘testuser’@’localhost’ identified by ‘securepwd’;

Başka bir makinede (ismi remotemc olan) çalışan bir veritabanına bağlanıyorsanız, aşağıdakileri kullanmanız gerekir (remotemc, bir ana makine adı veya bir IP adresi olabilir):

create user ‘testuser’@’remotemc’ identified by ‘securepwd’;

Artık kullanıcı adı ve parola oluşturuldu, daha önce oluşturulmuş örnek veritabanına erişim izni vermeliyiz:

grant all on sample.* to ‘testuser’@’localhost’;

veya veritabanı uzaksa;

grant all on sample.* to ‘testuser’@’remotemc’;

Şimdi, veritabanına yeni şifrenizle oluşturduğunuz kullanıcı olarak bağlanabildiğinizi doğrulamalısınız. Ayrıca, izinlerin doğru olduğundan emin olmak için, bağlandıktan sonra aşağıdaki komutları çalıştırabilirsiniz:

create table joe(id int primary key auto_increment, name varchar(25));

drop table joe;

Java Sınıf Yolu Kurma

Şimdi Java‘ya MySQL‘den nasıl bağlanacağımızın ayrıntılarına geçelim. İlk adım veritabanı sürücüsünü yüklemektir. Bu, aşağıdakileri uygun bir yerde çağırarak yapılır:

Class.forName(“com.mysql.jdbc.Driver”);

Kod bir kural dışı bir işlem atabilir, eğer bir GUI için hata mesajı biçimlendirmek gibi işlem yapmayı düşünüyorsanız bundan faydalanabilirsiniz:

try {

  Class.forName(“com.mysql.jdbc.Driver”);

} catch(ClassNotFoundException ex) {

  // use the exception here

}

Bu kodu sınıfın statik bir bloğunda çağırmak çok yaygındır, böylece sürücü yüklenemezse program hemen başarısız olur:

public class Sample

{

  static {

    try {

      Class.forName(“com.mysql.jdbc.Driver”);

    } catch(ClassNotFoundException ex) {

      System.err.println(“Unable to load MySQL Driver”);

    }

  }

}

Elbette, sürücüyü bulabilmek için programın sınıf yolunda bulunan sürücü JAR (yukarıda indirilmiş ve çıkarılmış) ile çağırılması gerekir:

java -cp mysql-connector-java–bin.jar:…

Java’dan MySQL’e Bağlanma

Artık MySQL sürücüsünü Java‘dan yüklemeyle ilgili bilgileri düzenlediğimizden, veritabanına bağlanmamıza izin verelim. DriverManager kullanmak için bir veritabanı bağlantısı oluşturma yolu şöyle:

String jdbcUrl = …;

Connection con = DriverManager.getConnection(jdbcUrl);

JdbcUrl da ne? diyecek olursanız açıklayayım; JdbcUrl, veritabanının bulunduğu sunucu, kullanıcı adı vb. dahil olmak üzere bağlantının ayrıntılarını gösterir. İşte örnek olması için örnek bir URL:

String jdbcUrl = “jdbc:mysql://localhost/sample?user=testuser&password=secrepwd”;

Bağlantı için gerekli tüm parametreleri ana makine adı (localhost), kullanıcı adı ve şifre dahil olmak üzere dahil ettik. Böyle bir şifreyi eklemek iyi bir uygulama değildir, alternatifler için aşağıya bakın;

Bu JdbcUrl‘yi kullanarak, bağlantıyı kontrol etmek için eksiksiz bir program:

public class Sample

{

  static {

    try {

      Class.forName(“com.mysql.jdbc.Driver”);

    } catch(ClassNotFoundException ex) {

      System.err.println(“Unable to load MySQL Driver”);

    }

  }

  static public void main(String[] args) throws Exception

  {

    String jdbcUrl = “jdbc:mysql://localhost/sample?user=testuser&password=securepwd”;

    Connection con = DriverManager.getConnection(jdbcUrl);

    System.out.println(“Connected!”);

    con.close();

  }

}

Bir veritabanı bağlantısının bir programda değerli bir kaynak olduğunu ve yukarıdaki gibi düzgün şekilde kapatılması gerektiğini unutmayın. Ancak, yukarıdaki kod, bir istisna olması durumunda bağlantıyı kapatmaz. Bağlantıyı normal veya anormal bir çıkışla kapatmak için aşağıdaki şablonu kullanın:

try(Connection con = DriverManager.getConnection(jdbcUrl)) {

  System.out.println(“Connected!”);

}

Yukarıda belirtildiği gibi, şifreyi JDBC URL‘sine gömmek kötü bir fikirdir. Kullanıcı adını ve parolasını doğrudan belirtmek için bunun yerine aşağıdaki bağlantı seçeneğini kullanabilirsiniz:

String jdbcUrl = “jdbc:mysql://localhost/sample”;

try(Connection con = DriverManager.getConnection(jdbcUrl, “testuser”, “securepwd”)) {

}

Veritabanını Java’dan Sorgulama

Veritabanına bağlantı kurulduğundan, veritabanı sürümünü sorgulama gibi bir sorguyu nasıl gerçekleştireceğimizi görelim:

select version();

Bir sorgu Java‘da aşağıdaki gibi yürütülür. Bir Statement nesnesi oluşturulur ve bir ResultSet döndüren executeQuery() yöntemi kullanılarak bir sorgu yürütülür:

String queryString = “select version()”;

Statement stmt = con.createStatement();

ResultSet rset = stmt.executeQuery(queryString);

Aşağıdaki gibi ResultSet sürümünü yazdırın. 1 rakamı, sonuçların sütun endeksini 1‘den başlayarak olduğunu belirtir:

while ( rset.next()) {

  System.out.println(“Version: ” + rset.getString(1));

}

Sonuçları işledikten sonra nesnelerin kapatılması gerekir:

rset.close();

stmt.close();

Ve Java‘dan MySQL‘e bağlanmak ve basit bir sorgu yapmak için gerekli olan herşeyi öğrendik!