Salve galera!
Tô com uma duvida intrigante aqui. Tenho uma classe que me conecto através dela ao banco de dados da minha aplicação (ACM_ConnectDB), esta classe contém um método estático que é onde eu faço a conexão (connection).
Pois bem, na classe da GUI a qual chamo a conexão com o banco - GUIRainfallGauges - tenho também um método chamado connection e é ai que chamo ACM_ConnectDB.
Segue o método da classe GUIRainfallGauges:
public class GUIRainfallGauges extends JFrame implements TreeSelectionListener, ActionListener{
private boolean logged;
private String[] userAndPass;
private Connection con;
private Statement stm;
private BEER beer;
private JMenuItem menuLogin;
private JMenuItem menuLogout;
(...)
private void connection() {
if(this.logged==false){
this.con = null;
this.stm = null;
GUI_LoginDataBase login = new GUI_LoginDataBase(this);
this.userAndPass = login.login();
ACM_ConnectDB.connection(this.con, this.stm, this.beer,this,this.userAndPass);
this.logged = this.beer.getLogged();
if(this.logged==true){
this.menuLogin.setEnabled(false);
this.menuLogout.setEnabled(true);
}
}
}
Coloquei as variáveis que estão no parâmetro de connection como globais pelo motivo de que o usuário ficará logado no sistema até que queira deslogar. Portanto em um momento específico darei um close() em con e stm. A variável userAndPass é um array de String onde está armazenado o login e a senha do usuário.
Segue minha classe ACM_ConnectDB:
[code]
public class ACM_ConnectDB {
public static void connection(Connection con, Statement stm, BEER beer, JFrame gui, String[] userAndPass){
try{
Class.forName("org.postgresql.Driver");
con = (Connection) DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/beerdb", userAndPass[0], userAndPass[1]); //blz, Connection é uma interface e isso retorna pra esta variavel um objeto que implementa Connection
stm = ((java.sql.Connection) con).createStatement();//idem pra Statement
beer.setLogged(userAndPass);
}catch(PSQLException e){
beer.setLogged(false);
String msg = "The system couldn't be connected with the data base. \n Contact data base administrator";
JOptionPane.showMessageDialog(gui, msg, "Error", JOptionPane.ERROR_MESSAGE);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
public static void close(Connection con, Statement stm){
try {
con.close();
stm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}[/code]
Como percebe-se, passei os parâmetros con e stm pelo motivo de que quero utilizá-los posteriormente para que na mesma classe da GUI ou outra qualquer, eu possa chamar o método close de ACM_ConnectDB passando os mesmos (já que são globais), porém minha dificuldade se encontra no fato de essas variáveis não tem seus valores modificados como eu esperaria, estranhei pois eu achava que eles apontavam para a mesma referência, o que sei que é. Quando imprimo seus valores na classe ACM_ConnectDB percebo que não são null, mas quando retorna pra a GUI, retorna null. =/
Tem alguma forma de fazer o que eu quero sem ser essa?
Caso queiram mais detalhes posso fazê-lo. Espero ter sido claro!
Abraços