Pegando dados do mysql

bom gente to com uma duvida
to criando um aplicatico que vai pega os dados que esta em uma tabela.
e setar esses dados em um Bean.

antes de continuar meu codigo fui ver se realmente estava salvando em meu Bean. e o que me retorna e um null no login e null na senha.

segue o codigo abaixo.

`
public class AdministradorDao implements Usuario{
private AdministradorBean administradorBean = new AdministradorBean();

@Override
public void logar(String nome, String senha) {//inicio
    PreparedStatement prepared;
    try(Connection conexao = new ConnectionFactory().getConnectionFactory()){
        prepared = conexao.prepareStatement("select * from administrador where admin_codigo = 1");
        ResultSet result = prepared.executeQuery();
        while(result.next()){
            administradorBean.setNome(result.getString("admin_login"));
            administradorBean.setSenha(result.getString("admin_senha"));
            }
        result.close();
        prepared.close();
    }catch(SQLException e){
        System.out.println("ERROR - De login de usuário");
        throw new RuntimeException(e);
    }
    

}//fim metodo logar

public static void main(String[] args) {
    AdministradorBean teste = new AdministradorBean();
    System.out.println(teste.getNome());
    System.out.println(teste.getSenha());
}

}

`

você conferiu se o select está retornando algum valor?

como poderia ver se ta retornando algo na aplicação ?
pois ja ta o drive importado certo.
conexao com banco tambem.

faz esse select no banco e vê se está retornando results

a ta sim.

então confere se esses nomes admin_login / admin_senha esta dessa forma no banco
esse nome é igual o do resultado do banco

administradorBean.setNome(result.getString("admin_login")); administradorBean.setSenha(result.getString("admin_senha"));

estão sim

Umas perguntas básicas…

  1. As configurações do banco estão corretas ?
  2. Você está apontando para o banco certo e o mesmo está no ar(online, ativo) ?
  3. Você pode postar a classe de conexão ? Esconda seu usuário e senha.

Olá, bom dia!

Não sei se me fugiu algo, mas pelo exemplo que você colocou ele tem que dar null nos dois valores mesmo.
No método main você simplesmente instanciou um objeto AdministradorBean e parou por aí. Em seguida acessou os atributos alocados na memória com referência à variável de referência teste. O construtor padrão de uma classe java inicializa os atributos de instância nos seus valores padrão, ou seja, no caso do objeto String é null.

Não sei se foi só a forma como demonstrou o exemplo, mas faria sentido não retornar nulo se as variáveis fossem populadas antes ou tivesse um construtor que o fizesse no ato da criação do objeto.

public static void main(String[] args) {
    AdministradorBean teste = new AdministradorBean();
    teste.setNome("Nome qualquer");
    teste.setSenha("12345");
    System.out.println(teste.getNome());
    System.out.println(teste.getSenha());
}

Veja só, é importante entender o escopo da variável que você está acessando. No seu exemplo você está acessando uma variável com o escopo de método, apenas.

public static void main(String[] args) {
    AdministradorBean teste = new AdministradorBean();
    System.out.println(teste.getNome());
    System.out.println(teste.getSenha());
}

Caso queira acessar a variável de instância, tente:

 public static void main(String[] args) {
        this.administradorBean.getNome();
    }

Veja que é importante criar um método get para este cara, o que ficaria:

getAdministradorBean.getNome();

Desta forma você está acessando a variável de instância.
É importante destacar que:

public class AdministradorDao implements Usuario{
   private AdministradorBean administradorBean = new AdministradorBean();
   // resto da classe
}

O escopo de administradorBean é a classe, ou seja, uma variável de instância.

public static void main(String[] args) {
        AdministradorBean teste = new AdministradorBean();
        System.out.println(teste.getNome());
        System.out.println(teste.getSenha());
}

O escopo de teste é o bloco do método, apenas.Por fim, considerando que o método logar preencheu a variável de instância corretamente, veja:

public static void main(String[] args) {
        AdministradorBean teste = new AdministradorBean();
        System.out.println(teste.getNome());
        System.out.println(teste.getSenha());

        // está correto retornar null, pois as variáveis iniciam nos seus valores padrão, ou seja, String = null

       System.out.println(this.administradorBean.getNome()); //ou da forma mais correta, contendo um get pra este cara
       System.out.println(getAdministradorBean.getNome());

      // aqui você deve ter os valores preenchidos, pois está acessando a variável de instância.
}

minha classe de banco ta chamando certo
essa aqui

`package br.com.lojaanandabiloia.bancodedados;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

public Connection getConnectionFactory(){
    String url = "jdbc:mysql://localhost/lojaananda";
    String login = "jorge";
    String password = "jorge0802";
    
    try {
        return DriverManager.getConnection(url,login,password);
    } catch (SQLException e) {
        System.out.println("ERROR - De conexão de banco de dados");
        throw new RuntimeException(e);
    }
    
}

}

`

`Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at br.com.lojaanandabiloia.view.Login$2.actionPerformed(Login.java:98)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

`

esse é o erro que gera pra mim

Olá tucupi, o que aparece no final do log indicado por “root cause” ou algo assim ? Assim entenderemos o erro com mais precisão. Duvida, no construtor da classe AdministradorBean ou Usuario você chama a função logar() ?

a função logar criei um interface usuario, pois no momento quem ira logar e o admin mas usuarios tambem poderam.

e a interface esta imprementada no DAO
e o metodo logar tambem

gente resolvi testar e conseguir chamar na minha propria DAO
mas quando vou para a tela de login e no butao de entrar não consigo chamar a proxima tela.

abaixo e o codigo na minha adminDao


public class AdministradorDao implements Usuario{
@Override
public boolean logar(String nome, String senha) {//inicio
PreparedStatement pstm;
ResultSet rs;
String sql = “select admin_login, admin_senha from administrador where admin_login = ? and admin_senha = ?”;
try(Connection conexao = new ConnectionFactory().getConnection()){
pstm = conexao.prepareStatement(sql);
pstm.setString(1, nome);
pstm.setString(2, senha);
rs = pstm.executeQuery();
if(rs.next()){
String lgnome = rs.getString(“admin_login”);
String snsenha = rs.getString(“admin_senha”);
System.out.println("nome: "+lgnome);
System.out.println("senha: "+snsenha);
this.chamarTela();
return true;
}else{
System.out.println(“erro no login”);
}
pstm.close();
rs.close();
} catch (SQLException e ) {
// TODO: handle exception
System.out.println(“ERROR: busca do administrador”);
throw new RuntimeException(e);
}
return false;
}

@Override
public void chamarTela() {
    // TODO Auto-generated method stub
    Principal telaPrincipal = new Principal();
    Login telaLogin = new Login();
    
    telaPrincipal.setVisible(true);
    telaLogin.dispose();
    }

public static void main(String[] args) {
    AdministradorDao teste = new AdministradorDao();
    teste.logar("admin", "password");
}
}

AdministradorDao.java (1.9 KB)

gente se possível queria muito a ajuda de vocês.
meu problema é o seguinte.
to fazendo uma tela de login que será permitido clientes e administradores.

dai eu necessito que tenha uma interface para implementar ambos usuários.
mais ai que vem meu problema, eu comecei a fazer apenas para o administrador pois queria ver se funcionava.

mas se eu fizer com a interface e colocando os métodos dessa interface na minha classe administradorDao ela gera um erro.

mas quando eu faço toda a lógica na minha tela de login, ela funciona.
mas ai entra o detalhe o código fica totalmente poluído e feio para manutenção, queria saber como posso ajeitar isso.

vou deixa o arquivo da minha tala aqui.

e no método abaixo esta a implementação que eu fiz.

Login.java (6.5 KB)
btnEntrarUsuario.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { } }

Troque a interface por uma Classe abstrata e implemente a lógica nela!

Eu já tentei implementar apenas na classe que está o Dao mas mesmo assim gerou error. Ela só funcionou quando eu fiz na própria classe de login na ação do botão mesmo. Aí nem sei o que fazer pois preciso disso em um Dao ele gera o error que postei acima

Amigo faça um novo tópico, não misture os assuntos

A tá beleza. Fiquei na dúvida de criar um novo. Mas irei fazer

1 curtida