Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] "Too many connections"

Estas en el tema de "Too many connections" en el foro de Java en Foros del Web. Buenas, estoy haciendo una prueba puramente académica de migrado a una oracle desde un txt. Uso la típica clase para conectar a BD (bajada de ...
  #1 (permalink)  
Antiguo 24/12/2015, 05:06
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
"Too many connections"

Buenas, estoy haciendo una prueba puramente académica de migrado a una oracle desde un txt. Uso la típica clase para conectar a BD (bajada de la red, autoría de chenao, jdbc clásico académico) y mi código resumido es el siguiente.

Código PHP:
public class migrar {

    public static 
void main(String[] args) {
    
        
FileReader fr null;
        
BufferedReader br null;
        
String linea null;
        
        try {
            
//SE INICIA LA LOGICA DEL MIGRADO
            
fr = new FileReader(rutaficheroblablavla);
            
br = new BufferedReader(fr);
        
                
//Mientras exista (siguiente) linea, y no pasemos del tamaño
            
while(  (linea=br.readLine())     !=null )  {
                
                        
//1// Preparamos la migración y hacemos cosas
                    
                    
conexion con = new conexion();
                    
String sql "INSERT INTO blablabla;"
                    
PreparedStatement pst con.getConnection().prepareStatement(sql);
                    
                    
//2// Preparamos el pst.setString
                    
pst.executeUpdate();        
                    
//3// TRAS LANZAR SQL, CERRAMOS CONEXIÓN
                    
pst.close();
                            
con.desconectar();
                    
//TODO Problema Estamos abriendo y cerrando 
                               //conexiones por cada registro
                    
                
}
                
            }

        } catch (
Exception e) {
            
e.printStackTrace();
            
// Pasamos. Solo es una migración

        
finally {
            
//4// AHORA CERRAMOS LA CONEXIÓN A FICHERO, no solo se cierra la BBDD.
            
try {
                if (
br != null) {
                    
br.close();
                }

                if (
fr != null) {
                    
fr.close();
                }
            } catch (
Exception e) {
                
e.printStackTrace();
                
// Pasamos. Solo es una migración
            
}

        } 

Es un código que funciona,y en ese aspecto no hay problema, pero como el fichero que uso de origen es muy grande, al final deja de meterme datos a mi BD, y me dice que

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientC onnectionException: Data source rejected establishment of connection, message from server: "Too many connections"


Es decir, que mucha petada conexiones y conexiones dentro del while.

Mi pregunta es; moviéndonos siempre en código académico para newbies tipo esto, sin entrar en pool de conexiones ¿etc, como podría hacerse para no lanzar esta sobrecarga de conexiones?

Muchas gracias
  #2 (permalink)  
Antiguo 24/12/2015, 05:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: "Too many connections"

Pues, como en todo lenguaje, NO ABRAS CONEXIONES DENTRO DE UN LOOP.
Las conexiones se abren FUERA del loop y dentro de el solo se ejecutan las consultas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/12/2015, 06:27
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: "Too many connections"

Si, tienes toda la razón, claro, pero sucede que si saco del loop la lineas...

Código PHP:
conexion con = new conexion(); 
y dejo dentro

Código PHP:
String sql "INSERT INTO tracatrá VALUES (?, ?, ?, ?, ?, ?);"
PreparedStatement pst con.getConnection().prepareStatement(sql); 
Tengo un null pointer, por que se ejecuta una vez, pero cuando va a la segunda iteracion del PreparedStatement pst = con.getConnection().prepareStatement(sql);, pues me da un escueto nullpointer

java.lang.NullPointerException
at com.ipartek.formacion.migracion.ejecucion.migrar.m ain(migrar.java:62)

Si me puedes presentar en pseudocódigo tu algoritmo a ver como dices, igual me ubico mejor

Última edición por trulari; 24/12/2015 a las 06:42
  #4 (permalink)  
Antiguo 24/12/2015, 06:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: "Too many connections"

Bueno,pero supongo que también habrás sacado del loop el cierre de conexión, y recordado que el siguiente INSERT de datos se debe realizar antes de cerrar el objeto PreparedSentences... ¿no?
Digo, cosa de no destruirlo antes de terminar...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/12/2015, 06:55
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: "Too many connections"

Pues no :( pensaba que si, por ser evidente, pero en un lio de cierre de }, no lo había hecho no. Muchas gracias.

Etiquetas: clase, sql, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:04.