Dúvida para instanciar classe de acesso ao BD

Bom dia,

Tentarei explicar meu problema: Tenho uma classe que conecta no oracle e eu tenho as 3 variáveis usadas para o método getConnection (user, pass e url), como estava colocando nesta classe 'fixo' as 3 variáveis, estava conectando e funcionando ok, porém descobri depois que para o trabalho precisarei poder conectar com outros usuários e senhas, e além disso em outras classes, preciso fazer selects com o user que esta conectado no momento. Acredito estar me enrolando na OO, estou bem perdido.

Por exemplo, tenho em uma outra tela(depois de ter logado) ter que saber todos os usuários do cadastrado no banco, faço um select pegando os owners de all_tables, porém pra fazer eu tenho que instanciar minha classe de conexão com o banco pra usar seu método que traz todos os ownres…

 Antes, como na classe de conexão tava fixo o user e pass, quando eu precisava, chamava a classe sem passar parâmetros (private GetConnection conn = new GetConnection()), porém pra resolver o problema dos diferentes user, eu passei por parâmetro no construtor da classe de conexão o user e pass, url continua fixo (na tela de login por exemplo pego o user e senha digitados e passo no construtor, private GetConnection con = new GetConnection(user, pass)). porém daí na outra classe que preciso chamar o metodo getAllOwners, preciso passar o user e pass pra instanciar a classe que conecta no banco, e não tenho acesso ao user e pass...

 Não sei se consegui me expressar direito para que entendam o problema, pois estou bem perdido nisso :(

Obrigado

Sua lógica ainda está meio confusa para mim, poderia postar o código e indicar onde está sua dúvida p/ facilitar?

Estou no trabalho agora, só a noite, após a aula que chegarei em casa e vejo se posto algo, mas nem sei bem o que colocar, pois são várias classes, e minha dúvida maior é como eu instancio uma conexão (depois de eu já ter feito login) em uma janela que vai ter uma pesquisa de owners por exemplo… só tem que listar todos owners daquele banco… “select owner from all_tables” pra executar este select tenho que ter uma instância da classe de conexão… E do modo que estou fazendo preciso do user e pass, que recebi lá na tela de login, e agora não tenho eles nesta tela… Deve ser algum detalhesinho que estou me passando, mas darei mais uma olhada qdo chegar em casa e posto algo…

Obrigado.

Olá,

 Vou colocar um pouco do código pra ver se ajuda a entender o que preciso...

Classe para conexão com banco e que tem o metodo para buscar os owners…

[code]public class GetConnection {
private static String url = “jdbc:oracle:thin:@localhost:1521:dbdesenv”;

 public static Connection getConnection(String user, String pass){ /*antes não tinha parâmetro(era local), ainda n ei se precisa, pois com parâmetro n sei como instanciar em outras classes que preciso do método desta classe*/
    Connection conn = null;
    try{
        String driverName = "oracle.jdbc.driver.OracleDriver";
        Class.forName(driverName);
             conn = DriverManager.getConnection(url,user,pass);
        conn.setAutoCommit(true);
    }catch (Exception e){
  }
    return conn;
}

//busca owners
public List<String> getAllOwners(String user, String pass) { /Aqui tb n tinha parâmetro, mas coloquei porque preciso para poder instanciar ‘con’…/
List<String> lst = new LinkedList<String>();

    String SQLstr = "select distinct(owner) from all_tables;";

    try {
        Connection con = getConnection(user, pass);
        Statement sta = con.createStatement();

        ResultSet res = sta.executeQuery(SQLstr);
        while (res.next()) {
            lst.add(res.getString("OWNER"));
        }
        res.close();
        sta.close();
        con.close();
    } catch (Exception ex) {
        System.out.println("Erro em capturar owners: " + ex.getMessage());
    }
    return lst;
}

[/code]
Método da Classe ValidaLogin, que chamo na tela de login, que terei os parametros user e pass, pois pegarei o que foi digitado na tela

[code]
public boolean ValidaUsuarioSenha(String username, String password){
Connection conn = GetConnection.getConnection(username, password);
try{
PreparedStatement ps = conn.prepareStatement("select username, password "
+ “from login where upper(username) = upper(?) and upper(password) = upper(?)”);
ps.setString(1, username);
ps.setString(2, password.toString());
ResultSet rs = ps.executeQuery();

        if (rs.next()){
            return true;
        }

   }catch(Exception e){
       e.printStackTrace();
   }
   return false;
}[/code]

Já aqui, neste método que esta em outra tela(depois de logar) não terei como usar o método para pegar os owners e popular um dropdown…

@Override
public void windowOpened(WindowEvent e) {  /* não tá funcionando ainda :(, ja coloquei 'implements WindowListener{' na criação da tela (public class JPanelInformacoesEstimativasTabelas extends javax.swing.JPanel implements WindowListener{)*/
    List&lt;String&gt; lst = con.getAllOwners();   
    for (String s : lst) {
        jComboBoxProprietario.addItem(s);
    }
}

Não sei se chega pra entenderem o que quero… Mas basicamente, quero poder instanciar a classe de conexão para poder usar seus métodos em outras telas… mas como minha classe usa usuario e senha, não to sabendo como fazer em outras telas, que n tem acesso a usuário e senha…

ps. Deve ter muita coisa feia aí :), pois faz um ano ± que não uso Java, até trabalho com desenvolvimento, mas não com OO.

e se você usar uma classe em que a instancia esteja disponivel para todas as classes.

[code]public class UsuarioSession(){

private static String usuario;

private static String senha;

public static String getUsuario(); //implementar os get/set

public static void setUsuario(String usuario);

public static String getSenha();

public static void setSenha(String senha);

}[/code]

como você irá usar vários usuários, acredito que seu sistema seja desktop…

sendo assim, na tela de login, você faz:

[code] ps.setString(1, username);
ps.setString(2, password.toString());
ResultSet rs = ps.executeQuery();

    if (rs.next()){  
        UsuarioSession.setUsuario("jefersOn"); //modifiquei aqui
        UsuarioSession.setSenha("123456");  //modifiquei aqui
        return true; //havia esquecido
    } [/code] 

remova os parametros do getConnection e do Getowners

[code]public List getAllOwners() { // vai ficar assim

//linha 23 use:
Connection con = getConnection(UsuarioSession.getUsuario(), UsuarioSession.getSenha());

}[/code]

siga o mesmo padrão no getConnection().

esta seria a minha solução, vamos aguardar por que talves haja uma forma melhor, sem precisar usar static.

Blz cara, obrigado. Irei tentar fazer assim… Se der certo aviso.

Caso alguém tenha mais dica, são bem vindas :wink:

Abraço pessoal