SORU
8 ŞUBAT 2010, PAZARTESİ


Java kapanış Veritabanı Bağlantıları

Biraz kafam karisti, http://en.wikipedia.org/wiki/Java_Database_Connectivity aşağıda okuyordum

Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" );

Statement stmt = conn.createStatement();
try {
    stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
} finally {
    //It's important to close the statement when you are done with it
    stmt.close();
}

Conn Bağlantısını kapatmak gerekiyor mu? Ne çok geç olursa oluyor.() yakın meydana gelmez?

Şu anda da form kapanmayan takınıyorum özel bir web uygulamam var, ama önemli bir şey gerçekten stmt, conn, ya da her ikisi?

Site zaman zaman ama server veritabanı bağlantı sorunu var diyor, benim şüphe kapalı değil, ama kapatmak için varsa bilmiyorum iniyor tutar.

CEVAP
8 ŞUBAT 2010, PAZARTESİ


İşin bittiğinde kullanarak Connection, açıkça yakın çağrılarak close() yöntem için serbest bırakmak için başka bir veritabanı kaynakları (imleçler, kolları, vb) bağlantı olabilir tutarak.

Aslında, güvenli desen Java yakın ResultSet, Statement Connection (Bu sırada) finally blok, işin bittiğinde onları, böyle bir şey:

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
    // Do stuff
    ...

} catch (SQLException ex) {
    // Exception handling stuff
    ...
} finally {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) { /* ignored */}
    }
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) { /* ignored */}
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) { /* ignored */}
    }
}

finally blok biraz (boş Çek önlemek için) içine geliştirilebilir:

} finally {
    try { rs.close(); } catch (Exception e) { /* ignored */ }
    try { ps.close(); } catch (Exception e) { /* ignored */ }
    try { conn.close(); } catch (Exception e) { /* ignored */ }
}

Ama, yine de, bu genellikle yardımcı bir sınıf nesneleri kapatmak için kullanarak null-güvenli yardımcı yöntemler ve finally blok böyle bir şey olur: sonuna kadar son derece ayrıntılı

} finally {
    DbUtils.closeQuietly(rs);
    DbUtils.closeQuietly(ps);
    DbUtils.closeQuietly(conn);
}

Ve, aslında, Apache Commons DbUtils tam da bu yüzden kendi yazmaya gerek yok bunu hangi DbUtils bir sınıf vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • JTechTalk

    JTechTalk

    11 Temmuz 2010