style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Conexion con SQL Server

Muchachos,

Tengo un problema con la conexion a una base de datos SQL Server 2005 desde una JSP, en el archivo context.xml se ha configurado para que se puedan realizar hasta 5 conexiones y en la clase utilitaria que realiza las consultas se apertura y cierra la conexion como usualmente se realiza.

El problema radica en que al parecer la conexion no se cierra pues cuando se realiza el envio del sexto comando (select, update o delete) la aplicacion se cae y no se puede continuar.

Alguien tendra la solucion a este caso?

context.xml
=========
<?xml version="1.0" encoding="UTF-8"?>

Clase utilitaria
==========
// ejecuta INS, DEL y UPD
public String ejecuta(String sql) {
String mensaje = null;

try {
Connection cn = getConnection();
if (cn == null) {
mensaje = "No hay acceso a base de datos!";
} else {
Statement st = cn.createStatement();
st.execute(sql);
cn.close();
}
} catch (SQLException e) {
mensaje = e.getMessage();
}

return mensaje; // returna null si todo bien
// Si falla retorna mensaje de error
}

public Connection getConnection() {
try {
Context contexto = new InitialContext();
DataSource fuenteDatos =
(DataSource) contexto.lookup(
"java:comp/env/" + recursoJdbc);

return fuenteDatos.getConnection();

} catch (NamingException e) {
return null;
} catch (SQLException e) {
return null;
}
}

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

close()

no siempre cierras la conexión. Si ocurre una excepción solamente obtienes el mensaje y lo devuelves pero ahi ya no cerraste la conexión, se queda abierta. Para que SIEMPRE cierres la conexión tienes que hacer:

Connection cn = null;
try {
  //aqui va todo tu codigo de obtener conexion, ejecutar statement etc
} catch (SQLException ex) {
  //aqui manejas la excepcion, obteniendo y devolviendo el mensaje o lo escupes a un log o algo
} finally {
  if (cn != null) {
    try {
      cn.close();
    } catch (SQLException ex) {
      //reporta que no se pudo cerrar siquiera
    }
  }
}

Pase lo que pase, excepción o no excepción, incluso si ocurre otro tipo de excepción que no estás cachando, el finally siempre se va a ejecutar.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">