Ben java.sql.Connection kapatırken atılan istisnalar yakalamak mı
Connection.close()atabilir SqlException, ama ben her zaman bu tür istisnalar görmezden güvenli olduğunu varsaydım (ve onları görmezden gelmez kod görmedim).
Kötü bir uygulama mı (ve bu tür istisnalar göz ardı zaman kimse sorunları vardı vardır).
Ne zaman Connection.close()herhangi bir özel durum oluşturur.
o kötüyse nasıl istisna işlemesi gerekir.
İstisna atmanın kötü olduğunu biliyorum, ama bir bağlantı kapatırken atılan istisnalar sadece reffering ediyorum (ve ben gördüm bu bu durumda oldukça yaygındır).
Herkes ne zaman biliyor mu Connection.close()şey atmak olabilir?
Oluştur 29/10/2008 saat 20:43 2008-10-29 20:43
kaynak kullanıcı jb.
Genel olarak, ben böyle istisnalar atmadan insanlar tarafından boşa gün yaşadım.
Ben istisnalar dışında birkaç temel kurallarını uygulayarak tavsiye:
Eğer bir kontrol hariç bir soruna neden ASLA KESİNLİKLE EMİN ise, SADECE o istisnayı yakalamak ve bunu işlemek gerek yok tam olarak neden açıklama. (Uyku aslında bunun ilgilenen sürece daima göz ardı edilebilir bir InterruptedException atıyor, ama dürüstçe bu genellikle göz ardı sadece durumdur? - Bunu yaptıktan maliyeti nedir, bunu asla eğer, hatta en)
Emin değilseniz, ancak bazen bunu elde yakalamak ve bir soruna neden olup olmadığını o, o bulunabilir sadece bu yüzden bir yığın izleme günlüğe edin. Yine, gereken tek istisna yakalamak.
Eğer kontrol istisna atılabilir herhangi bir şekilde göremiyorsanız, yakalamak ve denetlenmeyen istisna olarak yeniden atmak.
Ne istisna neden olduğunu tam olarak biliyorsanız, bunu yakalamak ve siz olarak çok açık ise, gerçekten bu durumda bir yığın izleme gerekmez tam olarak neden log buna neyin sebep olduğunu (ve eğer giriş ediyor sınıfını bahsedebilirim zaten log4j falan kullanmıyoruz.
Bu senin sorunun, son kategoriye girer gibi geliyor ve bir av bu tür, her zaman (kötü parametreler, boş gösterici ihtimale bazı kontrolsüz istisnası atılır belirli istisna yapmak, siz (İstisna e) yazdıklarını asla ...)
Güncelleme: Burada asıl sorun İşaretli İstisnalar ungood olmasıdır. Onlar var sadece yüksek kullanılan dil Java olduğunu. Onlar teoride düzgün, ancak eylem onlar yakalama bu davranışa neden ve işaretlenmemiş istisnalarla alamadım gizlemek.
Birçok insan onları gizleme bazen tamam olduğunu söyledi gerçeği yorumladı. spesifik olmak gerekirse, aklıma gelen bir durumdur:
Bunun bir istisnası koşulunu belirten daha bir uykunun sonuçlarını bildiren oluyor, InterruptedException bu kullanımı ilk etapta kontrol istisna modeliyle kötüye çünkü bu kullanım tamamdır hissetmek ana nedeni olduğunu varsayalım.
Bu sahip olmak çok daha mantıklı olurdu:
ilk Java oluştururken Ama (anlaşılır yüzden, bu kavramın içinde gerçekten temiz - sadece pratikte başarısız) yeni kontrol istisna modeliyle çok gurur
Ben bu kabul edilebilir bir kasa daha hayal edemiyorum, bu yüzden belki de bu listede olması gereken bir istisna görmezden geçerli olabilir tek durumda.
Cevap 29/10/2008 saat 20:49 2008-10-29 20:49 share
kaynak kullanıcı Bill K
Aslında, ne yaptığınızı burada (neredeyse) en iyi uygulama :-) ben Bahar 'JdbcUtils.java gördüklerini tek şey. Yani, başka bir catch bloğu eklemek isteyebilirsiniz.
Cevap 30/10/2008 saat 03:52 2008-10-30 03:52 share
kaynak kullanıcı anjanb
Asgari düzeyde her zaman her zaman sen yakalamak ve üzerinde hareket etmez istisnalar açın.
ufak dikizlemek yutulur Sessizce yakalandı istisnalar kötüsü.
Cevap 30/10/2008 saat 01:32 2008-10-30 01:32 share
kaynak kullanıcı matt b
Ben şahsen en az hata günlüğü senin ikinci fikir gibi. Eğer İstisna yakalamak Çünkü, bir SQL İstisna dışında bir şey yakalamak için teorik olarak mümkün. Ben neler olabileceğini emin değilim ya da ne kadar nadir ama tüm hataları baskı altına bana doğru görünmüyor (bellek istisnalar, vb dışına gibi).
Hataları bastırmak istiyorsanız, sadece bu şekilde ele alınmalıdır biliyorum çok özel olanları yapardı.
Hypothecial durum: sql açık bir hareketi vardı ve bağlantı kapama, bundan dolayı bir exceptino neden bu hatayı bastırmak istiyorum ne olur? Hatta baskılayan SQLExceptions biraz tehlikeli olabilir.
Cevap 29/10/2008 saat 20:51 2008-10-29 20:51 share
Not Apache Commons DbUtils bir sağlar closeQuietly()size 'gereksiz' yakalar kodunuzu dağınık olmaması için kullanabileceğiniz, yöntem. Ben yutma istisnaları savunan değilim Not, ancak bunun için close()senaryo ben genellikle kabul edilir düşünüyorum.
Cevap 09/03/2009 saat 15:26 2009-03-09 15:26 share
kaynak kullanıcı Brian Agnew
Ayrıca RuntimeException atabilseydin:
Eğer yöntem imzası değiştirmek zorunda olmayacak ve sorunun nedenini bulmak için daha sonra Exception.getCause yöntemi kullanmak mümkün olacak.
Cevap 30/10/2008 saat 02:39 2008-10-30 02:39 share
kaynak kullanıcı Fábio
) İdeal bir dünyada, sen, elbette, bir istisna ile ilgili hiçbir şey asla ideal bir dünyada, bir özel durumu ya 8- olsun asla
Yani, çeşitli seçeneklerin etkilerini incelemek gerekir.
Sadece Log: Veritabanı işlemleri işi bitmiş, hiçbir şey yapmak ama kaynakları temizlemek için sol vardır. Bir istisna bu noktada oluşursa, büyük olasılıkla yapılan işin üzerinde bir etkisi yoktur, bu nedenle hata günlüğü yeterli olacaktır. Bir hata giriş sırasında oluşursa Elbette, o zaman temelde aslında başarısız olmamış başarısız veritabanı işlemi işlemek zorunda.
Boş işleyicisi: Veritabanı işlemleri işi bitmiş, hiçbir şey yapmak ama kaynakları temizlemek için sol vardır. Bir istisna bu noktada oluşursa, büyük olasılıkla yapılan işin üzerinde bir etkisi yoktur, bu nedenle yöntemi başarıyla döndürür. Bir sonraki veritabanı erişimi aynı sorun haline çalıştırmak olabilir, ama o haklı olarak uygun şekilde ele almak, sonra başarısız olacak ve bir işlemin, başlangıcında gerçekleşmelidir. Sorunun kendi kendine sabit ise, o zaman bir şey bugüne kadar yanlış gittiğini hiçbir gösterge olacaktır.
Sonunda biz başka başarısızlıklar kaynak temizleme inhibe etmek istemiyorum çünkü o temizleme oluşur sağlamak için blok bir bir close () operasyonu (lar) koymak için oldukça tipik senaryodur. Hiçbir Hata yoksa kendi işlem başarıyla tamamlandığında, sonra yöntem başarısız olmamalıdır. Bu durumda, boş istisna işleme oldukça normaldir.
Tabii görüşler değişecektir.
Cevap 29/10/2008 saat 22:03 2008-10-29 22:03 share
kaynak kullanıcı Robin
Sen istisna başa çıkmak zorundadır. Kötü bir uygulama değildir. Sadece dabatase bağlantıyı kapatmadan önce ağ kaybetti düşünün. Muhtemelen özel durum oluşturur.
nadir mı? Evet. Ben onlar istisna denir ve bu kadar görmezden bir neden değildir ne varsayalım. başarısız olsaydı, o başarısız olacağını unutmayın.
Ayrıca noktada boş bir bağlantı olması mümkün olup olmadığını düşünmesi gereken (bir NullPointerException neden olur) ya da değil.
Cevap 29/10/2008 saat 21:02 2008-10-29 21:02 share
kaynak kullanıcı Guido García
Onun daha iyi bir uygulama veritabanına bağlantıyı kapatmadan sırasında özel durum işlenecek. Eğer deyimi veya resultset nesnelere erişmek çalışıyorsanız, Çünkü kodunuzda zaman sonra bir noktada, o zaman otomatik olarak bir istisna yükseltecektir. Yani, daha iyi durum işlenecek.
Cevap 22/09/2012 saat 14:16 2012-09-22 14:16 share
kaynak kullanıcı Sankar
Bunu işleyebilir, o zaman bunu (ve beklenmedik eğer log). Bununla başa yapamıyorsanız yukarıda bazı kod hallederim öyleyse, o zaman düzgün rethrow.
Sessizce kodu düzeltmek için kişinin önemli bilgileri dışarıda bırakarak istisnaları olduğu yutma.
Cevap 04/04/2010 saat 11:04 2010-04-04 11:04 share
kaynak kullanıcı Thorbjørn Ravn Andersen
Bu bir "hiçbir zaman olur hata" ise durum o zaman sadece bir özel durum rethrow ve kimse onu yakalar umut olacak.
bu başka bir durum buysa ben muhtemelen bunu günlüğe kaydeder
Cevap 30/10/2008 saat 02:21 2008-10-30 02:21 share
kaynak kullanıcı SWD
Bir istisna görmezden Benim deneyim iyi bir fikir değildir. Eğer istisna açmış bana, eğer üretim destek mühendisleri ve analistler size bir ton teşekkür edecek inan.
Doğru Günlüğü çerçevesini kullanıyorsanız Ayrıca, istisna sıfır veya minimal performans etkisi olmaz.
Cevap 29/10/2008 saat 21:07 2008-10-29 21:07 share
kaynak kullanıcı a-sak
Nasıl test sırasında log4j.properties geçersiz kılmak?
JFreeChart - Yanlış grafik yazı
özyineleme iki farklı yolu
"Yakın zorlamak" hatası nasıl engellenir
Birden çok Grails uygulamalar aynı Tomcat7 (XMX, emm, vs.) ile ilgili olduğunda grails.tomcat.jvmArgs
Eclipse tercihleri ​​altında roboVM ayarlarını erişilemiyor
Dinamik döngüler için iç içe sayısının değiştirilmesiyle
Nasıl benim SEÇ sorguları daha verimli / hızlı döngü için iç infaz yapılır?
Nasıl hystrix ile feign kullanırken 400 Hataları yaymak için izin veririm?