Foros Club Delphi

Foros Club Delphi (http://www.clubdelphi.com/foros/index.php)
-   JAVA (http://www.clubdelphi.com/foros/forumdisplay.php?f=16)
-   -   Como Abrir una conexion de manera global (http://www.clubdelphi.com/foros/showthread.php?t=63886)

uper 07-03-2009 00:49:43

Como Abrir una conexion de manera global
 
buenas tardes, tengo instalado mysql y netbeans 6.5, lo que pretendo hacer con la conexion a la base de datos
es que sea de forma global como se hace comun en los lenguajes y de ahi poder realizar todas mis conexiones.

En los desarrollos con delphi o vb(creo un modulo.bas declaro el nombre de la conexion como public para despues
abrirla al cargarse en la forma principal y en cada forma solo me refiero a ella para mis operaciones como
conexion.Execute(sql) al terminar la cierro por completo)

es pocible hacer algo semejante.
por un lado tengo una clase TestConnection.java que es la conecion, despues tengo en una frame
coloco un boton, y ese boton tengo q instanciar a la clase para llamar a los objetos declarados, y realizar
las operaciones:

Código PHP:

 private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
         
TestConnection conexion = new TestConnection();
         
conexion.conectar(); 

ahora que mejor que cuando se ejecute la forma se carge la conexion y se cierre hasta que termine el programa
lo hize.... pero ahora puse el codigo en un boton para hacer una operacion pero no se puede por que solo
funciona en el evenyo declarado, existe la forma de que pueda llamar desde cualquier lado mi objeto Coneccion

Código PHP:

private void formWindowOpened(java.awt.event.WindowEvent evt) {
        
TestConnection conexion = new TestConnection();
         
conexion.conectar();



este es codigo que realize y me da errores por que no encuentra a que conexion es ?
siendo que estan en declarados como public y claro es bajo la instancia si se encuentran
siempre y cuando esten en dicho evento, como puedo lograr esto ya que lo que no quiero es
ejecutar otra conecion al servidor ya que ya abri una y bajo esa siempre pueda trabajar:

Código PHP:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {

  
////TestConnection conexion = new TestConnection();  Si quito lo comenarios corre sin problemas
      
ResultSet rs;  //variable local
  ////conexion.conectar()
      
etiqueta.setText("Se ha establecido la Conexion " conexion.url);
      try {
      
rs=stm.executeQuery("select * from eq_categorias");
      while(
rs.next()){
       
System.out.println("Registro " rs.getString(1)+ " " rs.getString(2));
      }
      
conexion.conn.close();
      }
      catch(
SQLException ex) { System.out.println(ex); }

 }
    
        
//TestConnection .java

import java.sql.*;

public class 
TestConnection {
 public 
String url="jdbc:mysql://localhost/base";
 public 
Statement stm;
 public 
ResultSet rsgl;
 public 
Connection conn null;

 public 
void conectar(){
 try {
   Class.
forName("org.gjt.mm.mysql.Driver");
   
//Class.forName("com.mysql.jdbc.Driver).newInstance();
   
conn=DriverManager.getConnection(url,root,clave);
   if (
conn !=null) {
      
System.out.println("Coneccion a la base de datos");
      
stm=conn.createStatement();
      
//conn.close();
   
}
  }
 catch(
SQLException ex) { System.out.println(ex); }
   catch(
ClassNotFoundException ex)  { System.out.println(ex); }
 }
//fin deconectar



les agragesco si alguien me puede comentar como instanciar la clase como si dejeramos
publicamente.
gracias

roman 07-03-2009 02:06:42

Si declaras la conexión dentro de un método, la referencia será visible sólo en ese método. Si declaras la variable como miembro de la clase de tu frame:

Código:

public class MainFrame extends JFrame
{
  private TestConnection conexion;

  ...
}

Puedes instanciar la clase en el constructor de MainFrame y la variable conexion será accesible desde cualquier método del frame.

// Saludos

Arcioneo 12-03-2009 20:08:56

dentro de la clase
 
Dentro de la clase donde haces la conexion, ves que hiciste un objeto Connection no? Pues haz un Getter de ese objeto y siempre sobre la instancia que tienes podrás llamarlo sin pedos

rgstuamigo 14-03-2009 17:09:41

Lo mejor que veo es que tengas una clase adicional que se llame por ejemplo "Utilidades" (seria algo asi como un DataModule en Delphi donde puedas instanciarla desde cualquier parte del programa) en esta clase defines tus variables y/o objetos que vas a utilizar globalmente algo asi por ejemplo:

Código PHP:

package util;

public class 
Utilidades 
{  public static TestConection conexion;//aqui esta tu variable
    
public static final int CONECTAR=1;///de aqui para abajo otros ejemplos...
    
public static final int DESCONECTAR=2;
    public static final 
int CONTACTO=3;
    public static final 
int VER_CONTACTO=4;
    public static final 
int CORREO=5;
    public static final 
int VER_CORREO=6;
    public static final 
int CIVIL=7;
    public static final 
int MODIFICAR=8;
    public static final 
int INSERTAR=9;
    public static final 
int CAMBIO_PRODUCTO=11;
    
    public static final 
int LINEA=12;
    public static final 
int FAMILIA=13;
    public static final 
int UNIDAD_MEDIDA=14;
    public static final 
int MATERIAL=15;
    public static final 
int AGENCIA=16;
    public static final 
int COMPROBANTE=17;
    public static final 
int SECCION=18;
    public static final 
int PEDIDO=19;
    public static final 
int SALIR=20;


Una varaible declarada static puede ser vista o instanciada desde cualquier parte de una aplicacion.
No te olviddes de que java es un lenguaje 100% orientado a objetos, no es igual a otros lenguajes que son Hibridos como c,c++ o Delphi que soportan la programacion modular todavia, en cambio java es como te dije 100% orientado a objeto, por tanto cuando quieras instanciar a la variable conexion bastara con poner lo suiguiente:
Cita:

Utilidades.conexion

roman 14-03-2009 19:26:04

Parece uno de esos casos donde quien pregunta es el menos interesado en el problema :rolleyes:

// Saludos


La franja horaria es GMT +2. Ahora son las 14:21:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi