Merhabalar.

Önceki yazıda JDBI Api ile nasıl çekeceğimizi görmüştük. Bu yazıda ise kayıt güncelleme konusuna değineceğiz.

Elimdeki People tablosunda şu şekilde 3 kayıt yer almakta:

Ben şimdi buradaki id’si 2 olan kaydın city bilgisini İstanbul olarak güncellemek istiyorum. Bu işlem için öncelikle PersonOperationInterface içerisinde şu iki satır kodu yazıyorum:

@SqlUpdate("update people set city = :city where id= :id")
public void updatePerson(@Bind("city") String city, @Bind("id") int id);

Veritabanı üzerindeki bir manipülasyon yani değişiklik yapılacağı için metodu @SqlUpdate ile işaretledik. Notasyona parametre olarak da update işlemini gerçekleştirecek SQL cümleciğini verdik. SQL komutunda alanı değiştirilecek city ve alan değişimi sırasında belirleyici olacak id alanlarını parametre olarak geçirdik. Metot içerisinde de önceki yazılardan hatırlayacağımız gibi bu parametreleri @Bind notasyonu ile metodun parametre kısmında da tanımladık.

Tablo üzerinde güncelleme işlemini yapacak metodumuz da şu şekilde olacak:

package com.ilkaygunel.jdbitutorial.operation;

import com.mysql.cj.jdbc.MysqlDataSource;
import org.skife.jdbi.v2.DBI;

public class UpdateOneField {

    public static void main(String[] args) {
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://localhost:3306/JDBIDatabase?useUnicode=true&characterEncoding=UTF-8");
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("");

        DBI dbi = new DBI(mysqlDataSource);

        PersonOperationsInterface personOperationsInterface = null;

        try {
            personOperationsInterface = dbi.open(PersonOperationsInterface.class);
            personOperationsInterface.updatePerson("İstanbul", 2);
            System.out.println("The Record Updated Successfully!");
        } catch (Exception e) {
            System.err.println("An Error Occured!\n Error is:" + e);
        } finally {
            if (personOperationsInterface != null) {
                personOperationsInterface.close();
            }
        }
    }
}

UpdateOneField sınıfımız tabloya bağlanmak için önceki yazılarımız ile hemen hemen aynı main metoduna sahip. Burada fazlalık olarak bir de veritabanı URL’nin sonunda ?useUnicode=true&characterEncoding=UTF-8 komutunu ekledik. Daha önce de dediğim gibi JDBI JDBC katmanının üzerine kurulu. Java ile geliştirilen uygulamarda veri tabanını UTF-8 tanımlamak yeterli olmuyor ve veri tabanına bağlantı açılan URL’in Türkçe karakter ile çalışacağı söylenmesi gerekiyor. JDBC için de bağlantı URL’nin sonuna ?useUnicode=true&characterEncoding=UTF-8 ifadesini eklediğimizde Türkçe karakter ile çalışabilir hale geliyor.

try bloğuiçerisinde JDBI vasıtası ile bir PersonOperationsInterface nesnesi elde ediyoruz ve bu nesne ile updatePerson() metodunu çağırıyoruz. Metoda güncellenecek şehir bilgisini ve güncellenek kaydın id bilgisini geçirdik. Son olarak işlem update sırasında hata vermez ise işlemin başarılı gerçekleştiği mesajını yazdırıyoruz. Hata olursa da catch içinde yakalıyoruz.

finally içinde de kapatım işlemini yapıyoruz.

Kodu çalıştırdığımda konsol çıktısı şu şekilde olmakta:

Veri tabanı üzerinden baktığımda da kaydın güncellenmiş olduğunu görüyorum:

Birden fazla kayıt güncellemek istediğimiz durumu düşünelim şimdi. Örneğin name alanı Vedat olan tüm kayıtların city alanlarını Çanakkale olarak değiştirmek istiyorum. Orada da yukarıdaki ile aynı işlem söz konusu olacak. Sadece parametre olarak id gibi tanımlayıcı bir alan yerine tekrarlanan alan olan name’i vereceğim.

Şu 2 satır kodu PersonOperationsInterface arabirimine ekliyorum:

@SqlUpdate("update people set city = :city where name= :name")
public void updateMultiplePerson(@Bind("city") String city, @Bind("name") String name);

İşlemi yapacak kodum da şu şekilde:

package com.ilkaygunel.jdbitutorial.operation;

import com.mysql.cj.jdbc.MysqlDataSource;
import org.skife.jdbi.v2.DBI;

public class UpdateMultipleRecord {

    public static void main(String[] args) {
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setURL("jdbc:mysql://localhost:3306/JDBIDatabase?useUnicode=true&characterEncoding=UTF-8");
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("");

        DBI dbi = new DBI(mysqlDataSource);

        PersonOperationsInterface personOperationsInterface = null;

        try {
            personOperationsInterface = dbi.open(PersonOperationsInterface.class);
            personOperationsInterface.updateMultiplePerson("Çanakkale", "Vedat");
            System.out.println("The Records Updated Successfully!");
        } catch (Exception e) {
            System.err.println("An Error Occured!\n Error is:" + e);
        } finally {
            if (personOperationsInterface != null) {
                personOperationsInterface.close();
            }
        }
    }
}

Kodu çalıştırdığımda tablonun yeri hali şu şekilde oluyor:

Bu yazıda anlatacaklarım da bu kadar arkadaşlar. Gelecek yazıda kayıt silme konusuna değineceğiz.

Görüşene kadar sağlıcakla kalın.

Selam ve Sevgilerimle