SORU
8 ŞUBAT 2011, Salı


Kapanış havuzda Bağlantıları BULUNMAKTAYDI

Yerli mal kullanımı için standart kod bölümü

Connection conn = getConnection(...);
Statement  stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
                                                ResultSet.CONCUR_READ_ONLY);
ResultSet  rset = stmt.executeQuery (sqlQuery);

// do stuff with rset

rset.close(); stmt.close(); conn.close();

Soru 1: Bağlantı Havuzu kullanarak, sonunda Bağlantıyı kapatmak gerekir? Eğer öyleyse, kayıp havuzu amacı bu değil mi? Eğer öyleyse, nasıl bir veri Kaynağı Bağlantısı belirli bir anını boşa çıkar ve yeniden kullanılabilir ne zaman bilen var mı? Bu konuda biraz kafam karıştı, herhangi bir işaretçiler takdir.

Soru 2: aşağıdaki yöntem standart bir şey Bulunur mu? Havuzdan bir bağlantı almak için bir girişim gibi görünüyor, ve Kaynağı tespit edilemez ise, eski moda DriverManager kullanın. Hatta zamanında idam edilecek olan emin değiliz. Yukarıdaki soruyu tekrar ederek, bir Bağlantı böyle bir yöntem çıkıyor kapatmalısınız?

Siz, - BAYAN teşekkür ederim

synchronized public Connection getConnection (boolean pooledConnection)
                                                        throws SQLException {
        if (pooledConnection) {
                if (ds == null) {
                        try {
                                Context envCtx = (Context)
                                        new InitialContext().lookup("java:comp/env");
                                ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
                                return ds.getConnection();
                        } catch (NamingException e) {
                                e.printStackTrace();
                }}
                return (ds == null) ? getConnection (false) : ds.getConnection();
        }
        return DriverManager.getConnection(
                "jdbc:mysql://" ipaddy ":" dbPort  "/"   dbName, uName, pWord);
}

Edit: bir yığın izleme görmüyoruz beri havuza bağlantı alıyorsanız düşünüyorum.

CEVAP
8 ŞUBAT 2011, Salı


Bağlantı Havuzu kullanarak, sonunda Bağlantıyı kapatmak gerekir? Eğer öyleyse, kayıp havuzu amacı bu değil mi? Eğer öyleyse, nasıl bir veri Kaynağı Bağlantısı belirli bir anını boşa çıkar ve yeniden kullanılabilir ne zaman bilen var mı? Bu konuda biraz kafam karıştı, herhangi bir işaretçiler takdir.

Evet, kesinlikle havuza bağlantı olarak kapatmak gerekir. Aslında gerçek bağlantı etrafında sarıcı. Gerçek bağlantı havuza geri bırakın yorganın altında wil. Havuza daha gerçek bağlantı olup olmadığını karar vermekaslındakapatılması veya getConnection() yeni bir çağrı için yeniden. Yani, bir bağlantı havuzu kullanarak konum olsun veya olmasın, ne olursa olsunher zamanonları satın nerede try Blok finally blok ters sırayla tüm BULUNMAKTAYDI kaynakları kapatın. Java 7'de bu daha fazla try-with-resources deyimini kullanarak basitleştirilmiş olabilir.


Aşağıdaki yöntemi bir şey standart bulunur? Havuzdan bir bağlantı almak için bir girişim gibi görünüyor, ve Kaynağı tespit edilemez ise, eski moda DriverManager kullanın. Hatta zamanında idam edilecek olan emin değiliz. Yukarıdaki soruyu tekrar ederek, bir Bağlantı böyle bir yöntem çıkıyor kapatmalısınız?

Örnek oldukça korkutucu olabilir. Sadece applicationwide DB config sınıfının bazı kurucu / başlatma uygulama başlatma sırasında DataSource başlatmak/sadece bir kere araması lazım. Sadece uygulamanın hayatının geri kalanı boyunca bir getConnection() ve aynı veri kaynağı sonra Ara. Senkronizasyon ne nullchecks gerek.

Ayrıca Bkz:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 99being99

    99being99

    2 EYLÜL 2008
  • Android Developers

    Android Deve

    9 Kasım 2007
  • bcbauer

    bcbauer

    7 ŞUBAT 2007