Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JDBC sürücüsünü indirin
Kurtarma noktaları, işlemlerin bölümlerini geriye almak için bir mekanizma sunar. SQL Server'da SAVE TRANSACTION savepoint_name deyimini kullanarak bir kayıt noktası oluşturabilirsiniz. Daha sonra, işlemin başlangıcına geri dönmek yerine kayıt noktasına geri dönmek için bir ROLLBACK TRANSACTION savepoint_name deyimi çalıştırırsınız.
Kayıt noktaları, hataların oluşma olasılığının düşük olduğu durumlarda kullanışlıdır. Seyrek hata durumunda işlemin bir kısmını geri almak için bir kayıt noktası kullanılması, güncelleştirmeyi yapmadan önce bir güncelleştirmenin geçerli olup olmadığını görmek için her işlem testinden daha verimli olabilir. Güncelleştirmeler ve geri alma işlemleri pahalı işlemlerdir, bu nedenle tasarruf noktaları yalnızca hatayla karşılaşma olasılığının düşük olması ve güncelleştirmenin önceden geçerliliğini denetleme maliyetinin nispeten yüksek olması durumunda etkilidir.
SQL Server için Microsoft JDBC Sürücüsü, SQLServerConnection sınıfının setSavepoint yöntemi aracılığıyla kayıt noktalarının kullanımını destekler. setSavepoint yöntemini kullanarak, geçerli işlem içinde adlandırılmış veya adlandırılmamış bir kayıt noktası oluşturabilirsiniz ve yöntemi bir SQLServerSavepoint nesnesi döndürür. Bir işlem içinde birden çok kayıt noktası oluşturulabilir. Bir işlemi belirli bir kayıt noktasına geri almak için SQLServerSavepoint nesnesini rollback (java.sql.Savepoint) yöntemine geçirebilirsiniz.
Aşağıdaki örnekte, bloktaki iki ayrı deyimden try oluşan yerel bir işlem gerçekleştirilirken bir kaydetme noktası kullanılır. İfadeler, AdventureWorks2025 örnek veritabanındaki Production.ScrapReason tablosunda çalıştırılır ve ikinci ifadeyi geri almak için bir kayıt noktası kullanılır. Bu, veritabanına yalnızca ilk deyimin işlenmesiyle sonuçlanıyor.
public static void executeTransaction(Connection con) {
try(Statement stmt = con.createStatement();) {
con.setAutoCommit(false);
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Correct width')");
Savepoint save = con.setSavepoint();
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong width')");
con.rollback(save);
con.commit();
System.out.println("Transaction succeeded.");
}
catch (SQLException ex) {
ex.printStackTrace();
try {
System.out.println("Transaction failed.");
con.rollback();
}
catch (SQLException se) {
se.printStackTrace();
}
}
}