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) );
}
}
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.