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

Mantener la conexión

Estas en el tema de Mantener la conexión en el foro de Java en Foros del Web. A ver si se explicarme, que llevo muy poquito con Java. La idea es hacer una pequeña aplicación que controle unos pedidos. Uso netbeans y ...
  #1 (permalink)  
Antiguo 26/06/2012, 17:13
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Mantener la conexión

A ver si se explicarme, que llevo muy poquito con Java.
La idea es hacer una pequeña aplicación que controle unos pedidos. Uso netbeans y utilizo varios Jframe, (uno general, añadir un pedido, listar los pedidos etc.
En todos los ejemplos que veo sobre conexión a mysql, se utiliza la conexión en el propio jframe donde se abre, pero no veo la manera de utilizar esa conexión a la base de datos, si la aplicación abre otro Jframe distinto. Supongo que si realizo otra conexión, al final tendré abiertas varias y no creo que sea buena idea. Utilizo una pequeña clase auxilias para las labores de lectura, escritura etc. y otra para hacer la conexión:

Código:
import java.sql.*;

/**
 *
 * @author javier
 */
public class Conectate {
    
    Connection conexion = null;
    
public Conectate() {
    try{
    Class.forName("com.mysql.jdbc.Driver");
    conexion = DriverManager.getConnection("jdbc:mysql://localhost/dbname","user","pass");
    if (conexion!=null){
    System.out.println("Conexión a base de datos listo");
    }
    }catch(SQLException e){
    System.out.println(e);
    }catch(ClassNotFoundException e){
    System.out.println(e);
    }
}

public Connection getConnection(){
    return conexion;
}

public void desconectar(){
conexion = null;
}

}
Hay alguna manera de abrir la conexión al cargar el primer Jframe y poder usarla en el resto de las Jframe, hasta cerrarla?

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 26/06/2012, 17:23
Avatar de khristian_696  
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Mantener la conexión

Hola camps
Lo que quieres hacer no es muy complicado, puedes tener una sola conexión abierta durante la ejecución de tu programa, esto se hace declarando la variable de conexión dentro de la clase como private.
En el siguiente ejemplo muestro el pseudocódigo:

Código:
public class mantieneConectado()
{
       private Connection conexion = nulll;
         mantieneConectado()
        {

        //Abres conexion
           conexion.open();

          //Código
           //Jframe1
           //Jframe2
           //... etc.

       //cierras conexion
        conexion.close();
          
        }

        public static viod main (String args[])
        {
               new mantieneConectado(); 
         }
}
Obviamente, no existe la instrucción conexion.open(), con esto lo que trato de mostrar es que es aquí donde haces la conexión como actualmente la estas realizando, y como puedes observar al ser una variable de la clase todos los objetos pertenecientes a ella podrán tener acceso.

Suerte!!!
  #3 (permalink)  
Antiguo 26/06/2012, 17:54
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mantener la conexión

Muchas gracias, mañana lo probaré a ver si acierto!
  #4 (permalink)  
Antiguo 02/07/2012, 17:16
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mantener la conexión

Muy buenas de nuevo.
Aunque lo intenté así, no vi la manera. Finalmente he hecho lo siguiente, después de ver varios tutoriales y ejemplos por si a alguien le va bien:

He creado una clase auxiliar como ya tenía, pero con algunas reformas:

Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package s********;
import java.sql.*;
import java.util.Hashtable;

/**
 *
 * @author javier
 */

public class SQLconnection {


static Connection conn = null;
private static SQLconnection INSTANCIA = null;
 private SQLconnection() {
    	conectar();
    }
 
 public void conectar() {
    	//datos de la conexión
    String user = "user";
    String password = "pass";
    String db = "my_db";
    String host = "my_host";
    String url = "jdbc:mysql://" + host + "/" + db;
    
    try {
    Class.forName("org.gjt.mm.mysql.Driver");
    conn = DriverManager.getConnection(url, user, password);
    if (conn != null)
    {
        System.out.println("Conexión a base de datos "+url+" … Ok");
        stm = conn.createStatement();
    }
    }
    catch(SQLException ex) {
    System.out.println("Hubo un problema al intentar conectarse con la base de datos "+url);
    }
    catch(ClassNotFoundException ex) {
    System.out.println(ex);
    }
    }
 
private synchronized static void creaInstancia() {
        if (INSTANCIA == null) { 
            INSTANCIA = new SQLconnection();
 }
}
 
public static SQLconnection getInstancia() {
    if (INSTANCIA == null) creaInstancia();
       return INSTANCIA;
    }
 /**Metodo para cerrar  la conexión
     * 
     */
public void delInstancia() {
    	INSTANCIA = null;
    	cerrarConnection();     
    }

    /**Metodo para cerrar la connexión con la base de datos
	 * 
	 */
public void cerrarConnection() {
	try {
		conn.close();
	} catch (Exception e) {
		System.out.println("Error al cerrar la conexi�n.");
	}
}
Y después, para llamarlo desde los distintos Jframes:

Código:
*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package s********;



//import java.sql.Connection;
import javax.swing.table.DefaultTableModel;



/**
 *
 * @author javier
 */
public class Pedidos extends javax.swing.JFrame {

    int fila = -1;
    Object[][] dtPer;
    SQLconnection conexion2 = SQLconnection.getInstancia();
      
    /**
     * Creates new form Pedidos
     */
    public Pedidos() {
        initComponents();            
    }
...
ahora en "conexion2" tenemos la conexion a la base de datos, y todos los metodos que implementemos en la clase SQLconnection necesarios para nuestra apicación, aqui solo he mostrado los 3 o 4 básicos para hacer la conexión y como "llamarla".
  #5 (permalink)  
Antiguo 02/07/2012, 17:39
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Mantener la conexión

el objeto conexion puedes pasarlo a otras clases metiante el construcor de esas clases asi al crear su objeto la conexión tendra su valor segun se lo hayas pasado...

O tambien puedes hacer la conexion static y public para acceder a ella desde cualquier clase, sin necesidad de pasarla a otras...
__________________
De nada, hay te encargo +1...
  #6 (permalink)  
Antiguo 02/07/2012, 17:42
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Mantener la conexión

Me lo apunto!! Gracias. Es que así dicho parece muy fácil, pero los novatos necesitamos "verlo" para entenderlo, jejeje. Menos mal que poco a poco voy cogiéndole el hilo.
  #7 (permalink)  
Antiguo 03/07/2012, 10:26
Avatar de khristian_696  
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 4
Respuesta: Mantener la conexión

Hola camps,
Hay varias maneras de solucionar este problema, el que te comentaba es cuando en una clase generas varios Frames, ya que al corresponder a la misma clase tienen acceso a los objetos de la misma. El ejemplo que mencionas es ideal cuando tienes varias clases y necesitas acceder a ciertos variables como es el caso de una conexión a BD.
Otra forma es como comenta zero0097, en donde declaras una variable pubilca la inicializas en la una clase y posteriormente todas las demás clases pueden tomar y modificar esta variable, sólo que aqui es un poco más peligroso ya que en ocasiones se pierde el hilo de las modificaciones que se le hacen a esta variable y en cualquier momento puede tomar un valor diferente al esperado.

Saludos

Etiquetas: mysql
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 11:17.