Notre section de code standard pour l'utilisation de JDBC est ...
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();
Question 1: Lors de l'utilisation du pool de connexions, faut-il fermer la connexion à la fin? Si tel est le cas, l'objectif de la mise en commun n'est-il pas perdu? Et sinon, comment DataSource sait-il quand une instance particulière de Connection est libérée et peut être réutilisée? Je suis un peu confus sur celui-ci, tous les pointeurs sont appréciés.
Question 2: La méthode suivante est-elle proche de la norme? Ressemble à une tentative d'obtenir une connexion à partir du pool, et si DataSource ne peut pas être établi, utilisez l'ancien DriverManager. Nous ne savons même pas quelle partie est exécutée au moment de l'exécution. En répétant la question ci-dessus, faut-il fermer la connexion en sortant d'une telle méthode?
Merci, - MS.
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: Je pense que nous obtenons la connexion groupée car nous ne voyons pas de trace de pile.