0Pricing
Java Academy · Ders

İşlemler

Commit ve rollback

İşlemler, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

İşlem Nedir?

Bir işlem, birkaç SQL işlemini tek bir ya hep ya hiç biriminde gruplayabilir.

Ya her ifade başarılı olur ve değişiklikler kalıcı hâle getirilir (commit) ya da bir şey başarısız olur ve hepsi geri alınır (rollback). Bu, veritabanının tutarlı kalmasını sağlar.

Bir Dakikada ACID

İşlemler şu ACID güvencelerini sağlar:

  • Atomiklik — ya hep ya hiç.
  • Tutarlılık — veritabanını geçerli bir durumdan başka bir geçerli duruma taşır.
  • Yalıtım — eşzamanlı işlemler birbirinin verilerini bozmaz.
  • Kalıcılık — bir kez commit edildikten sonra değişiklikler çökme durumunda da korunur.

Otomatik İşleme Alma Kipi

JDBC bağlantıları varsayılan olarak otomatik işleme alma kipinde çalışır: her ifade kendi işlemidir ve hemen commit edilir.

Bu, tek ifadeler için uygundur; ancak birkaç yazma işleminin birlikte başarılı olması gerektiğinde işe yaramaz. İşlemleri kendiniz denetlemek için otomatik işlemeyi kapatın.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/bank";
        try (Connection conn = DriverManager.getConnection(url, "app", "secret")) {
            System.out.println("Default auto-commit: " + conn.getAutoCommit());
            conn.setAutoCommit(false);
            System.out.println("Now manual: " + conn.getAutoCommit());
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
}

commit ve rollback

Otomatik işleme kapalıyken sınırları siz belirlersiniz:

  • conn.commit() bekleyen tüm değişiklikleri kalıcı hâle getirir.
  • conn.rollback() bu değişiklikleri iptal eder.

Klasik örnek para transferidir: bir hesabı borçlandırıp diğerini alacaklandırırsınız. İkisi de gerçekleşmeli ya da hiçbiri gerçekleşmemelidir.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/bank";
        String debit = "UPDATE account SET balance = balance - ? WHERE id = ?";
        String credit = "UPDATE account SET balance = balance + ? WHERE id = ?";
        try (Connection conn = DriverManager.getConnection(url, "app", "secret")) {
            conn.setAutoCommit(false);
            try (PreparedStatement d = conn.prepareStatement(debit);
                 PreparedStatement c = conn.prepareStatement(credit)) {
                d.setInt(1, 100); d.setInt(2, 1); d.executeUpdate();
                c.setInt(1, 100); c.setInt(2, 2); c.executeUpdate();
                conn.commit();
                System.out.println("Transfer committed");
            } catch (SQLException ex) {
                conn.rollback();
                System.out.println("Rolled back: " + ex.getMessage());
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
}

Başarısızlıkta rollback Deseni

Ezberlemeniz gereken yapı:

  • Otomatik işlemeyi kapatın.
  • İşi içteki bir try bloğunun içinde gerçekleştirin.
  • Başarılı olunca commit() çağırın.
  • catch içinde rollback() çağırıp hatayı yeniden fırlatın veya günlükleyin.

Rollback olmadan bir hata, veritabanının yarım güncellenmiş hâlde kalmasına neden olabilir.

Atomikliği Benzetimle Gösterme

Burada ya hep ya hiç fikri, bağımsız olarak çalışabilmesi için sade Java ile modellenmiştir. Anlık görüntü üzerinde iki güncelleme uygularız; güncellemelerden biri başarısız olursa anlık görüntüyü geri yükleriz.

public class Main {
    public static void main(String[] args) {
        int[] balances = {500, 300};
        int[] backup = balances.clone();
        try {
            balances[0] -= 200;
            if (balances[0] < 0) throw new IllegalStateException("insufficient funds");
            balances[1] += 200;
            System.out.println("Commit: " + balances[0] + ", " + balances[1]);
        } catch (RuntimeException e) {
            balances = backup;
            System.out.println("Rollback: " + balances[0] + ", " + balances[1]);
        }
    }
}

Kayıt Noktaları

Kayıt noktası, bir işlem içindeki işarettir. İşlemin tamamını iptal etmeden bu noktaya geri dönebilirsiniz.

  • Savepoint sp = conn.setSavepoint()
  • conn.rollback(sp) yalnızca bu noktadan sonraki çalışmayı geri alır.

Uzun işlemlerde kısmi kurtarma için kullanışlıdır.

Yalıtım Düzeyleri

Yalıtım, bir işlemin başka bir işlemin commit edilmemiş çalışmalarından neleri gördüğünü denetler. JDBC, düzeyleri conn.setTransactionIsolation(...) aracılığıyla tanımlar:

  • TRANSACTION_READ_COMMITTED — yaygın varsayılan.
  • TRANSACTION_REPEATABLE_READ
  • TRANSACTION_SERIALIZABLE — en güçlü, en yavaş.

Daha yüksek yalıtım, anormallikleri önler ancak eşzamanlılığı azaltır.

Okuma Anormallikleri

Daha düşük yalıtım şunlara izin verebilir:

  • Kirli okuma — başka bir işlemin commit edilmemiş değişikliğini görme.
  • Tekrarlanamayan okuma — iki okuma arasında bir satırın değişmesi.
  • Hayalet okuma — önceki bir sorguyla eşleşen yeni satırların görünmesi.

Mantığınızın tolere edemediği anormallikleri hâlâ önleyen en düşük düzeyi seçin.

Otomatik İşlemeyi Geri Yükleme

Bağlantıyı bir havuzdan aldıysanız, geri vermeden önce ilk durumunu geri yükleyin.

Elle yürütülen bir işlemden sonra conn.setAutoCommit(true) çağrısını yeniden yapın (veya bağlantıyı alırken gördüğünüz değere sıfırlayın); böylece sonraki kullanıcı ayarlarınız yüzünden beklenmedik bir durumla karşılaşmaz.

İşlemleri Kısa Tutun

Bir işlem, commit edilene veya rollback yapılana kadar kilitleri tutar. Uzun işlemler diğer çalışmaları engeller ve kilitlenme riskini artırır.

  • Açık bir işlem içinde yavaş ağ çağrıları gerçekleştirmeyin veya kullanıcıdan yanıt beklemeyin.
  • Verilerinizi önce toplayın, ardından işlemi başlatıp yazma ve commit adımlarını hızlıca gerçekleştirin.

Kısa ve odaklanmış işlemler çok daha iyi ölçeklenir.

Kısa Kontrol

connection.rollback() çağrısının etkisi nedir?

Özet

İşlemler size ya hep ya hiç güvencesi sağlar:

  • setAutoCommit(false) ile otomatik işlemeyi kapatın.
  • Başarılı durumda commit(), başarısız durumda rollback() çağırın.
  • Kısmi geri alma için kayıt noktalarını kullanın.
  • Doğruluk ile eşzamanlılık arasında denge kurmak için yalıtım düzeylerini ayarlayın.
  • Havuzdan alınmış bir bağlantıyı geri vermeden önce otomatik işlemeyi geri yükleyin.

Sıkça Sorulan Sorular

“İşlemler” dersi ücretsiz mi?

Evet — “İşlemler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“İşlemler” dersinde ne öğreneceğim?

Commit ve rollback Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İşlemler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JDBC Temelleri
  2. PreparedStatement
  3. İşlemler
  4. HikariCP ile Bağlantı Havuzlama
← Java Academy Sayfasına Dön