16/11/2005, 01:29
|
| | Fecha de Ingreso: mayo-2004
Mensajes: 85
Antigüedad: 20 años, 8 meses Puntos: 1 | |
Os muestro mas informacion:
Para el modelo de datos he hecho lo siguiente:
He creado un lógica de Negocio y otra de Datos. La lógica de Negocio se encarga de capturar errores que pueden haber al llamar a las funciones de la Lógica de datos. La lógica de datos se encarga de meter los parámetros que se le pasan por función en los procediminetos almacenados. La clase de la lógica de datos será una clase estática implementada con patrón singleton, es decir, q durante la ejecución del programa solo podrá haber un objeto de la lógica de datos, así nos aseguramos que no hagamos varias conexiones a la base de datos y solo haya una. Os pongo un poco de código:
Lógica Datos __________________________________________________ __
public class LDatos_genesys {
private static LDatos_genesys Ldatos;
private Connection con=null;
private String url="";
private String usr="";
private String pwd="";
static public LDatos_genesys getLDatos_genesys() throws Exception {
if (Ldatos==null)
Ldatos = new LDatos_genesys();
return Ldatos;
}
public void Conectar()
throws SQLException, ClassNotFoundException {
//cargar controlador de sql Server
Class.forName("com.microsoft.jdbc.sqlserver.SQLSer verDriver" );
//obtener la conexion
con = DriverManager.getConnection(url,usr,pwd);
}
public LDatos_genesys() {
try{ url="jdbc:microsoft:sqlserver://"+ConfInfo.BDNEGOCIO_HOST+":"+ConfInfo.BDNEGOCIO_P ORT+";DatabaseName="+ConfInfo.BDNEGOCIO_NAME;
usr=ConfInfo.BDNEGOCIO_USER;
pwd=ConfInfo.BDNEGOCIO_PWD;
Conectar();
}catch(Exception e){
}
}
...........//ejemplo de llamada por procedimiento almacenado
public ResultSet consultar_Agenda(String codigo,String Isla)throws SQLException, ClassNotFoundException{
if (!Conectado()) Conectar();
CallableStatement pa=null;
pa=con.prepareCall("{call consultar_Agenda(?,?) }");
pa.setString(1,codigo);
pa.setString(2,Isla);
return pa.executeQuery();
}
..........
}
Logica Negocio _______________________________________________
public class LNegocio_genesys {
private LDatos_genesys LD;
private Logger log;
private int res;
/** Creates a new instance of LNegocio */
public LNegocio_genesys() {
try{
LD = LDatos_genesys.getLDatos_genesys();
}catch(Exception e){}
}
...........//llamada a la funcion de Logica de datos. Devuelve un resulSet que ya lo trato en el programa para sacar valores.
public ResultSet consultar_Agenda(String codigo,String isla) throws SQLException, ClassNotFoundException{
return LD.consultar_Agenda(codigo, isla);
}
..........
}
__________________________________________________ __________
Respecto al controlador que utilizo es el nativo: Class.forName("com.microsoft.jdbc.sqlserver.SQLSer verDriver" );
no¿?¿??¿?
Podría ser problemas de red ??? el caso es q cuando van muchas consultas seguidas una de otra, la primera tarda pero las siguientes las hace rapidísimas, es como si la primera creara la conexión con la base de datos y las demás ya tuvieran ese trabajo hecho. Lo extraño es q cuando creo el objeto de la Logica de datos ya creo la conexión con la base de datos, es decir, q cuando se ejecuta la primera consulta a la BD ya no tendría pq hacer la conexión. En definitiva no se cual puede ser el motivo ... pero es q me tarda casi 10 segundos en ejecutar la primera consulta y eso es excesivo. Podría ser una mala configuración del Sql Server ???? problemas de red ??? y si pongo un timeout a la conexion de un tiempo elevado ??? como podría hacer eso, desde la cadena de conexión o desde el Sql Server ???? ;)
bueno, muxas gracias. saludos
Última edición por ferblaca; 17/11/2005 a las 01:49 |