Acessar objeto instanciado de outra classe

10 respostas
ricardo_p

Estou iniciando em Java, e tava querendo fazer o seguite.

Tenho:
Uma janela principal do programa.
Uma classe que acessa o banco de dados (firebird).
E um formulario. => jInteralFrame

O que eu queria é instanciar a classe conexao_firebird dentro dessa janela principal, e poder acessa-la desse formulário.

Queria fazer, para poder conectar com o banco de dados apenas uma vez, e não sempre que eu precisar.

Tem como?

Ricardo.

10 Respostas

nbluis

Poste parte do seu codigo ai, que a gente te ajuda.
ok?

Valeu…

peerless

import seupacote.suaclasse_de_banco;

class seuframe … {

 private suaclasse_de_banco MINHA_INSTANCIA = new suaclasse_de_banco();

seuframeCONSTRUCTOR() {

MINHA_INSTANCIA.conecte_bd;

}

}

sacou ± ?

abs

nbluis

Bah… manda o encriptador que tu fez isso ai…
hehehehe…

nao entendi nada.

peerless

Não foi eu que fez a pergunta… eu dei uma resposta …
:hunf:

ricardo_p

peerless:
Não foi eu que fez a pergunta… eu dei uma resposta …
:hunf:

Sim, e sua resposta funcionou! Eu acho…rs…
Foi só adicionar o pacote no import

Está dando outro erro aqui, mas acho que não tem há ver com essa parte, vou testar aqui e respondo se funcionou ou não.

1112

Por favor, sigam a dica do Mantu quando forem postar trechos de código. :wink:

ricardo_p

Não dei conta ainda…rs…

O que eu pretendo é instanciar essa classe apenas uma vez, quando inicio o programa, e poder utilizar seus métodos nas diversas classes que o programa terá.

Essa é minha classe conexao_firebird:

package soc.sta.eletricas;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import java.util.ArrayList;
import java.util.List;


public class conexao_firebird {

    public Connection con = null;
    public Statement  stm = null;

    public conexao_firebird() {

        try {

            Class.forName("org.firebirdsql.jdbc.FBDriver");
            con = DriverManager.getConnection(
                "jdbc:firebirdsql:10.0.37.91/3050:D:/dados/telecom/dbtelecom.fdb", "SYSDBA", "masterkey");

            stm = con.createStatement();

        } catch (ClassNotFoundException e) {

            System.out.println("excessao ClassNotFound...");
            e.printStackTrace();

        } catch (SQLException e) {

            System.out.println("SQL Exception... Erro dos Bravos");
            e.printStackTrace();

        }

        return;
    }

    public List pegaRegional() throws SQLException {

        List     lista        = new ArrayList();
        String   strSelect    = "SELECT * FROM GB_REGIONAL";
        int      i            = 0;

        ResultSet rs = stm.executeQuery( strSelect );

        while (rs.next()) {
            lista.add(i, rs.getString("NME_REGIONAL") );
            i++;
        }

        return lista;

    }


}

Quero instanciar ela na classe jEletricas, que é minha classe principal:

package soc.sta.eletricas;

import javax.swing.JFrame;

public class jEletricas extends javax.swing.JFrame{
    
    conexao_firebird conexao = new conexao_firebird();    
    
    public jEletricas() {
        initComponents();
    }

E quero ter acesso a essa conexão da classe imp_trasmissao:

package soc.sta.eletricas;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import soc.sta.eletricas.jEletricas;

public class imp_transmissao extends javax.swing.JPanel {

    //conexao_firebird conexao = new conexao_firebird();
    JFileChooser fc = new JFileChooser();

    String           strCaminho;
    
    public imp_transmissao() {
        initComponents();
        
        //------------------------------------------------------------------------------------------
        // Carrega lista de Regionais na ComboBox
        //------------------------------------------------------------------------------------------

        int  i = 0;
        List lstRegional = new ArrayList();
        
        cbo_regional.removeAllItems();

        try {
            lstRegional = conexao.pegaRegional();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        cbo_regional.addItem("");
        for (i = 0; i < lstRegional.size(); i++) {
            cbo_regional.addItem( lstRegional.get(i) );
        }        
        
    }

Num tô conseguindo ainda… :oops: :roll:

ricardo_p

La na Classe jEletricas em vez de instanciar como:

conexao_firebird conexao = new conexao_firebird();

Instanciei como statico:

static conexao_firebird conexao = new conexao_firebird();

E parece ter funcionado… Isso mesmo?

1112

O que você quer seria mais ou menos um Singleton. Porém, hoje em dia (se é que algum dia não foi) o uso de Singletons é considerada uma má prática, lembrando bastante as “variáveis globais” que se encontra por aí, além de outras desvantagens. Por exemplo, fazendo o que você quer com um Singleton, você não poderia mudar seu código para ter um pool de conexões com facilidade. Prefira um Factory Method.

ricardo_p

Obrigado Douglas!

Vou dar uma pesquisada sobre Factory Method.

Criado 23 de fevereiro de 2007
Ultima resposta 26 de fev. de 2007
Respostas 10
Participantes 4