[RESOLVIDO]Login

35 respostas
D

ola gente tudo bem?eu preciso de uma ajuda estou usando o postgree e o eclipse eu fiz uma classe conexao que conecta com o banco e não sei como chamar essa conexao pra minha classe EfetuarLogin no botão que vai acessar postarei os códigos pra vocês verem obrigada!!! se alguém pudesse me ajudar!!!

Classe conexao

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLWarning;
import java.sql.Statement;

public class Conexao {
  private static boolean Connection;

public static void main(String[] args) throws Exception {
    Connection conn = getConnection();
    conn.setAutoCommit(false);
    Statement st = conn.createStatement();

    ResultSet rs = st.executeQuery("SELECT * FROM LoginUser");
    
    if(Connection = true){
      	System.out.println("conexao estabelecida com sucesso");
      }
      else{
      	System.out.println("erro de conexao");
      }
  //  outputResultSet(rs);

    rs.close();
    st.close();
    conn.close();
  }


  private static Connection getConnection() throws Exception {
    Class.forName("org.postgresql.Driver");
    String url = "jdbc:postgresql:TurmaN40";

    return DriverManager.getConnection(url, "postgres", "postgres");
    
}
}
classe EfetuarLogin
import java.awt.*;
import java.awt.event.*;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.*;

import java.sql.*;
//import controle.Utilitarios;

// Ctrl+Shift+F => Formata o código
// Ctrl+A e Ctrl+i => Formata a seleção

public class EfetuarLogin extends JFrame {
	
	private JLabel rotulo1, rotulo2;
	private JTextField caixa1, caixa2;
	private JButton botao1;
	
	private static EntityManagerFactory fabricaDeEntidades = null;

	private static EntityManager gerenciador = null;

	public EfetuarLogin(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) {
		super("Login");
		Container tela = getContentPane();

		tela.setLayout(null);
		fabricaDeEntidades=fabricaDeEntidades2;
		gerenciador=gerenciador2;

		rotulo1 = new JLabel("Usuário:");
		rotulo2 = new JLabel("Senha:");
	
		caixa1 = new JTextField();
		caixa2 = new JTextField();

		botao1 = new JButton("Acessar");
	
		// coluna, linha, largura, altura
		rotulo1.setBounds(21, 19, 47, 20);
		caixa1.setBounds(78, 19, 90, 20);

		botao1.setBounds(70,80, 100, 20);

		rotulo2.setBounds(21, 50, 100, 20);
		caixa2.setBounds(78, 50, 90, 20);
		
		tela.add(rotulo1);
		tela.add(caixa1);

		tela.add(rotulo2);
		tela.add(caixa2);

		tela.add(botao1);
	
		
		botao1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Persistir dados
				// inclusão de um novo registro
				if (caixa1.getText().equals("") || caixa2.getText().equals("")) {
					
					String sql = "select * from LoginUser where usuario like'"+
						caixa1.getText()+"' and senha like'"+
						caixa2.getText()+"'";
					JOptionPane.showMessageDialog(null,"usuário logado com sucesso");
			          new Menu(fabricaDeEntidades,gerenciador);
				}
				else{
					JOptionPane.showMessageDialog(null, "erro ao efetuar login");
				}
				
			}
		});

		

		// setSize(largura, altura);
		setSize(250, 150);
		setVisible(true);
		setLocationRelativeTo(null);
	}

	public static void main(String[] args) {

		fabricaDeEntidades = Persistence
				.createEntityManagerFactory("TurmaN40PostgreSQL");

		gerenciador = fabricaDeEntidades.createEntityManager();

		EfetuarLogin app = new EfetuarLogin(fabricaDeEntidades, gerenciador);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
}

35 Respostas

F

da uma lida na apostila FJ11 e FJ21 da Caelum, vaum te ajudar bastante…

mas veja soh.

//classe conexao
public class Conexao{
    //aqui vc faz a conexao com o banco
}

//classe q trabalha com classe conexao.
public class Cliente{
   Conexao con = new Conexao(); //instancia da classe Conexao   
}

Basicamente eh isso…mas como falei, da uma lida nas apostilas da Caelum.

t+

D

eu vou ler sim então a conexao ja está feita naquela classe e eu ja instanciei nao sei por no botao acessar que seria la encima o botao1 pra funcionar porque ele esta assim vc
nao coloca senha nem usuario ele entra e se você colocar da erro de login.

F

vc precisa ver se a conexao esta sendo realmente feita com o BD…
coloque um output qquer pra ver isso.

t+

D

ta sendo feita sim…

D

ta certa essa conexao ou precisa mudar alguma coisa??

E

Boa tarde amigo!
Seguinte acho que está errado essas linhas suas:

Connection conn = getConnection();  
 conn.setAutoCommit(false);

Eu faço a conexão diferente… Olha como faço:

Connection conn = DriverManager.getConnection("url do banco de dados", "nome de usuario do banco de dados", "senha do banco de dados");

Pronto com essa linha você faz a conexão e depois pode usar o statement normalmente… Para fechar basta fazer isso: (Lembre-se sempre de fechar a conexão)

conn.close();

Talvez tenha que usa um try e um catch(SQLException):

try {
    conn.close();
} catch (SQLException e) {
    throw new RuntimeException(e);
}

Não lembro mas acho que no driver manager precisa também… Acho que dessa forma funcionará.
Eu crio uma classe a parte para ficar mais organizado a conexão:

public class ConnectionFactory {
    public Connection getConnection() {
        return DriverManager.getConnection("url do banco de dados", "nome de usuário do banco de dados", "senha do banco de dados")
    }
}

e na minha classe DAO faço dessa forma:

public class MeuDAO {
    private Connection connection;
        
        public MeuDAO() {
            this.connection = new ConnectionFactory().getConnection();
        }

        public void FecharConexao() {
            this.connection.close();
        }
}

Assim sempre que instanciar um objeto referente a MeuDAO ele abre uma conexão. Não muito vantajoso por isso dependendo do caso crio um método void que preciso chamá-lo para criar uma conexão pois se não sempre que instanciar essa classe criará uma conexão com o mesmo banco de dados deixando aberto.

N

esdras_63, eu já faria um pouco diferente. Criaria uma única conexão para ser usada enquanto não der um commit ou um rollback. Melhor de controlar, pois você só tem uma conexão ativa por vez e não fica sobrecarregando o banco com várias conexões do mesmo usuário.

public class ConnectionFactory {

    private static ConnectionFactory connectionFactory = new ConnectionFactory();
    private Connection connection;
   
    private ConnectionFactory() {}
    public static ConnectionFactory getInstance() {
        return connectionFactory;
    }

    public Connection getConnection() throws SQLException {
        
        if (connection == null) {
  
            Class.forName("seu driver");
            connection = DriverManager.getConnection("url", "usuário", "senha");          
        }
        return connection; 
    } 

    public void commit() throws SQLException {

        connection.commit();
        connection = null;
    }

    public void rollback() throws SQLException {

        connection.rollback();
        connection = null;
    }
}

Com isso, eu mantenho só uma instância da classe e só uma conexão ativa por vez, até "commitar" ou fazer rollback nas operações.
O commit é executado em uma operação de "Confirmar" de um formulário, por exemplo, e o rollback em um botão "Cancelar".

daniferreira, tenta fazer assim:

1. Cria a sua classe gerenciadora de conexões, como exemplifiquei acima;
2. Cria sua classe de Domínio de usuário e de Persistencia para o usuário:

public class Usuario {

    private String nome;
    private String senha;

    //getters e setters omitidos.
}
e...
public class PersistenciaUsuario {

    public List<Usuario> recuperarTodos() throws SQLException {

        String sentencaSelect = "SELECT * FROM LOGINUSER";
        Connection connectionSelect = ConnectionFactory.getInstance().getConnection();
        PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);
        ResultSet resultSelect = statementSelect.executeQuery();
        
        List<Usuario> usuarios = new ArrayList<Usuario>();
        while (resultSelect.next()) {
            usuarios.add( recuperarObjeto(resultSelect) );        
        }
        statementSelect.close();
          
        return usuarios;
    }
 
    public Usuario recuperarObjeto(ResultSet resultSelect) {

        Usuario usuario = new Usuario();
        usuario.setNome(resultSelect.getString("NOME"));
        usuario.setSenha(resultSelect.getString("SENHA"));
       
        return usuario;
    }
}
Faça o main assim...
public class Main {

    public static void main(String[] args) {

        try {

            PersistenciaUsuario persistenciaUsuario = new PersistenciaUsuario();
            List<Usuario> usuarios = persistenciaUsuario.recuperarTodos();

            System.out.println("Lista de usuários:");
            System.out.println("_____________________________________");
            for (Usuario usuario : usuarios) {
            
                System.out.println(usuario.getNome() + "  -  " + usuario.getSenha());
                System.out.println("_____________________________________");
            }
        }
        catch (SQLException errSQL) {
            errSQL.printStackTrace();
            ConnectionFactory.getInstance().rollback(); // qualquer erro, cancela tudo que fez no BD.
        }
    }
}

e testa e vê no que dá. Dê-nos o reply aqui, caso haja algum erro!

D

Fiz o que vc falou pra fazer criei a classe conexao

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

public class Conexao {  
  
    private static Conexao conexao = new Conexao();  
    private Connection connection;  
     
    Conexao() {}  
    public static Conexao getInstance() {  
        return conexao;  
    }  
  
    public Connection getConnection() throws SQLException {  
          
        if (connection == null) {  
    
            try {
				Class.forName("org.postgresql.Driver");
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}  
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");            
        }  
        return connection;   
    }   
  
    public void commit() throws SQLException {  
  
        connection.commit();  
        connection = null;  
    }  
  
    public void rollback() throws SQLException {  
  
        connection.rollback();  
        connection = null;  
    }
}

a classe persistenciausuario

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


import Modelo.LoginUser;

public class PersistenciaUsuario {  
  
    public List<LoginUser> recuperarTodos() throws SQLException {  
  
        String sentencaSelect = "SELECT * FROM LoginUser";  
        Connection connectionSelect = Conexao.getInstance().getConnection();  
        PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);  
        ResultSet resultSelect = statementSelect.executeQuery();  
          
        List<LoginUser> usuario = new ArrayList<LoginUser>();  
        while (resultSelect.next()) {  
            usuario.add( recuperarObjeto(resultSelect) );          
        }  
        statementSelect.close();  
            
        return usuario;  
    }  
  
    public LoginUser recuperarObjeto(ResultSet resultSelect) throws SQLException {  
  
        LoginUser usuario = new LoginUser();  
        usuario.setUsuario(resultSelect.getString("usuario"));  
        usuario.setSenha(resultSelect.getString("senha"));  
         
        return usuario;  
    }  
}

criei a classe do getters e setters LoginUser

package Modelo;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class LoginUser {  
  @Id
    private String usuario;  
    private String senha;
    
	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}  
    
}

e criei a classe main

import java.sql.SQLException;
import java.util.List;

import org.postgresql.core.ConnectionFactory;

import Modelo.LoginUser;

public class Main {  
  
    public static void main(String[] args) throws SQLException {  
  
        try {  
  
            PersistenciaUsuario persistenciaUsuario = new PersistenciaUsuario();  
            List<LoginUser> usuarios = persistenciaUsuario.recuperarTodos();  
  
            System.out.println("Lista de usuários:");  
            System.out.println("_____________________________________");  
            for (LoginUser usuario : usuarios) {  
              
                System.out.println(usuario.getUsuario() + "  -  " + usuario.getSenha());  
                System.out.println("_____________________________________");  
            }  
        }  
        catch (SQLException errSQL) {  
            errSQL.printStackTrace();  
            Conexao.getInstance().rollback(); // qualquer erro, cancela tudo que fez no BD.  
        }  
    }  
}

e a efetuar login ta ai

import java.awt.*;
import java.awt.event.*;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.*;

import java.sql.*;
import Modelo.LoginUser;
//import controle.Utilitarios;

// Ctrl+Shift+F => Formata o código
// Ctrl+A e Ctrl+i => Formata a seleção

public class EfetuarLogin extends JFrame {
	Conexao con = new Conexao();
	private JLabel rotulo1, rotulo2;
	private JTextField caixa1, caixa2;
	private JButton botao1;
	protected LoginUser select;
	
	private static EntityManagerFactory fabricaDeEntidades = null;

	private static EntityManager gerenciador = null;

	public EfetuarLogin(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) {
		super("Login");
		Container tela = getContentPane();

		tela.setLayout(null);
		fabricaDeEntidades=fabricaDeEntidades2;
		gerenciador=gerenciador2;

		rotulo1 = new JLabel("Usuário:");
		rotulo2 = new JLabel("Senha:");
	
		caixa1 = new JTextField();
		caixa2 = new JTextField();

		botao1 = new JButton("Acessar");
	
		// coluna, linha, largura, altura
		rotulo1.setBounds(21, 19, 47, 20);
		caixa1.setBounds(78, 19, 90, 20);

		botao1.setBounds(70,80, 100, 20);

		rotulo2.setBounds(21, 50, 100, 20);
		caixa2.setBounds(78, 50, 90, 20);
		
		tela.add(rotulo1);
		tela.add(caixa1);

		tela.add(rotulo2);
		tela.add(caixa2);

		tela.add(botao1);
	
		
		botao1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Persistir dados
				// inclusão de um novo registro
				Conexao con = new Conexao();   
	               //Faz o select na base dados   
	               if (caixa1.getText().equals(select.getSenha()) || caixa2.getText().equals(select.getUsuario())) {     
	                   JOptionPane.showMessageDialog(null,"usuário logado com sucesso");     
	                     new Menu(fabricaDeEntidades,gerenciador);     
	               }     
	               else{     
	                   JOptionPane.showMessageDialog(null, "erro ao efetuar login");     
	               } 
				
			}
		});

		

		// setSize(largura, altura);
		setSize(250, 150);
		setVisible(true);
		setLocationRelativeTo(null);
	}

	public static void main(String[] args) {

		fabricaDeEntidades = Persistence
				.createEntityManagerFactory("TurmaN40PostgreSQL");

		gerenciador = fabricaDeEntidades.createEntityManager();

		EfetuarLogin app = new EfetuarLogin(fabricaDeEntidades, gerenciador);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
}

e deu esse erro aqui no eclipse

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at EfetuarLogin$1.actionPerformed(EfetuarLogin.java:67)
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.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(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.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(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$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.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)

N
daniferreira:
Fiz o que vc falou pra fazer criei a classe conexao
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Conexao {  
  
    private static Conexao conexao = new Conexao();  
    private Connection connection;  
     
    Conexao() {}  // <---------- coloque o construtor privado!
    public static Conexao getInstance() {  
        return conexao;  
    }  
  
    // TIREI O TRY/CATCH E COLOQUEI UM THROWS PARA FICAR MAIS LIMPO O CÓDIGO AQUI.
    // AS EXCEÇÕES DEVEM SER TRATADAS NAS CAMADAS SUPERIORES, POR ISSO O THROWS.
    public Connection getConnection() throws ClassNotFoundException, SQLException {  
          
        if (connection == null) {  
    
	    Class.forName("org.postgresql.Driver");	
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");            
        }  
        return connection;   
    }   
  
    public void commit() throws SQLException {  
  
        connection.commit();  
        connection = null;  
    }  
  
    public void rollback() throws SQLException {  
  
        connection.rollback();  
        connection = null;  
    }
}
O construtor deve ser privado. Você só quer uma instância da classe para manter só uma conexão ativa, certo? Portanto, crie o construtor privado. Quando quiser fazer acesso à classe, faça da seguinte forma:
ConnectionFactory.getInstance().getConnection();
daniferreira:
botao1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {


				Conexao con = new Conexao();   // O ERRO ESTÁ AQUI!
	               //Faz o select na base dados   
	               if (caixa1.getText().equals(select.getSenha()) || caixa2.getText().equals(select.getUsuario())) {     
	                   JOptionPane.showMessageDialog(null,"usuário logado com sucesso");     
	                     new Menu(fabricaDeEntidades,gerenciador);     
	               }     
	               else{     
	                   JOptionPane.showMessageDialog(null, "erro ao efetuar login");     
	               } 
				
			}
		});

		

		// setSize(largura, altura);
		setSize(250, 150);
		setVisible(true);
		setLocationRelativeTo(null);
	}

	public static void main(String[] args) {

		fabricaDeEntidades = Persistence
				.createEntityManagerFactory("TurmaN40PostgreSQL");

		gerenciador = fabricaDeEntidades.createEntityManager();

		EfetuarLogin app = new EfetuarLogin(fabricaDeEntidades, gerenciador);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}
}

O erro está na linha que assinalei acima. Você não pode instanciar a classe, visto que vai manter só uma instância dela em memória. Por isso o uso do construtor privado: para impedir que você instancie a classe várias e várias vezes.

Outra coisa: você tem certeza que tá fazendo certo esse login? Não estou vendo código de busca no banco de dados nem nada!
Eu faria da seguinte forma:

1. Criaria uma classe de serviços do usuário [caso não queira criar a classe, adicione na classe de persistência. Eu faço isso para manter uma arquitetura no projeto]:
public class ServicosUsuario {

    public LoginUser validarUsuarioNoSistema(String usuario, String senha) throws SQLException {

        PersistenciaUsuario persistenciaUsuario = new PersistenciaUsuario();
        List<LoginUser> usuarios = persistenciaUsuario.recuperarTodos();

        for (LoginUser usuario : usuarios) {
        
            if (usuario.getNome().toUpperCase().equals(usuario) && usuario.getSenha().toUpperCase().equals(senha)) {
                return usuario;
            }
        }

        return null;
    }
}
E aí sim eu faria o evento do botão:
buttonAcessarSistema.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

        ServicosUsuario servicosUsuario = new ServicosUsuario();
        LoginUser usuario = servicosUsuario.validarUsuarioNoSistema(textUsuario.getText(), textSenha.getText());
        if (usuario == null) {
            JOptionPane.showMessageDialog(null, "Usuário e/ou senha incorreto(s).");
        }
        else {
            
            // AQUI USEI "INTERFACEPRINCIPAL" PARA REPRESENTAR A CLASSE DA TELA QUE VOCÊ QUER MOSTRAR.
            InterfacePrincipal interfacePrincipal = new InterfacePrincipal();
            interfacePrincipal.exibirFormulario();
        }
D

vou tentar fazer isso que esta falando qualquer coisa eu posto aqui denovo pra vc ver rs

D

ta dando erro

botao1.addActionListener(new ActionListener() {   
		    public void actionPerformed(ActionEvent e) {   
		    	
		        ServicosUsuarios servicosUsuario = new ServicosUsuarios();   
		        LoginUser usuario = servicosUsuario.validarUsuarioNoSistema(caixa1.getText(), caixa2.getText());   //nessa linha ta dando erro 
		        if (usuario == null) {   
		            JOptionPane.showMessageDialog(null, "Usuário e/ou senha incorreto(s).");   
		        }   
		        else {      
		            Menu menu = new Menu(fabricaDeEntidades, gerenciador);   
		          Menu.exibirMenu();   //nesta linha também esta dando erro
		        }
D

a classe conexao esta assim

import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.SQLException;   
import java.sql.Statement;   
  
public class Conexao {     
     
    private static Conexao conexao = new Conexao();     
    private Connection connection;     
       
    Conexao() {}  // <---------- coloque o construtor privado!   
    public static Conexao getInstance() {     
        return conexao;     
    }     
       
    public Connection getConnection() throws ClassNotFoundException, SQLException {     
             
        if (connection == null) {     
       
        Class.forName("org.postgresql.Driver");   
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");               
        }     
        return connection;     
    }     
     
    public void commit() throws SQLException {     
     
        connection.commit();     
        connection = null;     
    }     
     
    public void rollback() throws SQLException {     
     
        connection.rollback();     
        connection = null;     
    }   
}
N

Se não postar o erro fica complicado… rs

D

acho que esse login nao vai sai ja criei um monte de classe e nda rs todas as classes q vc me falou eu criei ;))

D

xception in thread “main” java.lang.Error: Unresolved compilation problems:
Unhandled exception type SQLException
Unhandled exception type ClassNotFoundException

at EfetuarLogin.<init>(EfetuarLogin.java:67)
at EfetuarLogin.main(EfetuarLogin.java:95)
D

esse erro ai

D

da pra fazer assim e nao da erro mais nao loga de jeito nenhum!

ServicosUsuarios servicoUsuario = new ServicosUsuarios(); LoginUser Usuario = null; try { Usuario = servicoUsuario.validarUsuarioNoSistema(caixa1.getText(), caixa2.getText()); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //nessa linha ta dando erro if (Usuario == null) { JOptionPane.showMessageDialog(null, "Usuário e/ou senha incorreto(s)."); } else { Menu menu = new Menu(fabricaDeEntidades, gerenciador); Menu.exibirMenu(); //nesta linha também esta dando erro }

N

Não, ainda não tá igual ao que eu fiz... você não fez nenhuma alteração que falei.

Classe de conexão:
public class Conexao {     
     
    private static Conexao conexao = new Conexao();     
    private Connection connection;     
       
    private Conexao() {}  
    public static Conexao getInstance() {     
        return conexao;     
    }     
       
    public Connection getConnection() throws ClassNotFoundException, SQLException {     
             
        if (connection == null) {     
       
            Class.forName("org.postgresql.Driver");   
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");               
        }     
        return connection;     
    }     
     
    public void commit() throws SQLException {     
     
        connection.commit();     
        connection = null;     
    }     
     
    public void rollback() throws SQLException {     
     
        connection.rollback();     
        connection = null;     
    }   
}
Classe de persistência:
public class PersistenciaUsuario {  
  
    public List<LoginUser> recuperarTodos() throws ClassNotFoundException, SQLException {  
  
        String sentencaSelect = "SELECT * FROM LoginUser";  
        Connection connectionSelect = Conexao.getInstance().getConnection();  
        PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);  
        ResultSet resultSelect = statementSelect.executeQuery();  
          
        List<LoginUser> usuarios = new ArrayList<LoginUser>();  
        while (resultSelect.next()) {  
            usuarios.add( recuperarObjeto(resultSelect) );          
        }  
        statementSelect.close();  
            
        return usuarios;  
    }  
  
    public LoginUser recuperarObjeto(ResultSet resultSelect) throws SQLException {  
  
        LoginUser usuario = new LoginUser();  
        usuario.setUsuario(resultSelect.getString("usuario"));  
        usuario.setSenha(resultSelect.getString("senha"));  
         
        return usuario;  
    }  
}
Classe de serviços:
public class ServicosUsuario {

    public LoginUser validarUsuarioNoSistema(String usuario, String senha) throws ClassNotFoundException, SQLException {

        PersistenciaUsuario persistenciaUsuario = new PersistenciaUsuario();
        List<LoginUser> usuarios = persistenciaUsuario.recuperarTodos();

        for (LoginUser usuario : usuarios) {
        
            if (usuario.getNome().toUpperCase().equals(usuario) && usuario.getSenha().toUpperCase().equals(senha)) {
                return usuario;
            }
        }

        return null;
    }
}
Classe de UI:
public class InterfaceLoginUsuario extends JFrame {

    private JTextField textUsuario;
    private JPasswordField textSenha;
    private JButton buttonAcessar;

    public void exibirFormulario() {
   
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
    public InterfaceLoginUsuario() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        textUsuario = new JTextField(20);
        textUsuario = new JPasswordField(15);
 
        buttonAcessar = new JButton("OK");
        buttonAcessar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
                
                try {
                    ServicosUsuario servicosUsuario = new ServicosUsuario();
                    LoginUser usuario = servicosUsuario.validarUsuarioNoSistema
                        (textUsuario.getText(), new String(textSenha.getText()));

                    if (usuario == null) {
                        JOptionPane.showMessageDialog(null, "Usuário e/ou senha inválido(s)!");
                    }
                    else {
 
                        InterfacePrincipal interfacePrincipal = new InterfacePrincipal();
                        interfacePrincipal.exibirFormulario();
                    }
                }
                catch(ClassNotFoundException errClass) {
                    errClass.printStackTrace();
                }
                catch(SQLException errSQL) {
                    errSQL.printStackTrace();
                }
                catch(Exception err) {
                    err.printStackTrace();
                }
            }
        });
        getContentPane().add(new JLabel("Usuário:"));
        getContentPane().add(textUsuario);
        getContentPane().add(new JLabel("Senha:"));
        getContentPane().add(textSenha);
    }
}

É por aí... vê se faz as alterações corretas, se não a classe não funciona mesmo!
E posta o erro quando tiver... Como vamos ajudar se não soubermos o erro, não?

D

essa alteração da conexao pra privado eu nao entendi :x

N

Tenta instanciar uma classe que tenha o construtor privado pra você ver. Ela não instanciará, e é isso mesmo que eu queremos: uma única instância da classe, que é dada pelo método getInstance()… Copiou o código que eu fiz acima e testou?

D

sim copiei mais nao deu nada nao

nem apareceu java aplication pra rodar!

D

vou por tudo aqui

a classe conexao

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

public class Conexao {       
       
    private static Conexao conexao = new Conexao();       
    private Connection connection;       
         
    Conexao() {}     
    public static Conexao getInstance() {       
        return conexao;       
    }       
         
    public Connection getConnection() throws ClassNotFoundException, SQLException {       
               
        if (connection == null) {       
         
            Class.forName("org.postgresql.Driver");     
            connection = DriverManager.getConnection("jdbc:postgresql:TurmaN40", "postgres", "postgres");                 
        }       
        return connection;       
    }       
       
    public void commit() throws SQLException {       
       
        connection.commit();       
        connection = null;       
    }       
       
    public void rollback() throws SQLException {       
       
        connection.rollback();       
        connection = null;       
    }     
}

a classe persistencia usuario

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Modelo.LoginUser;

public class PersistenciaUsuario {     
     
    public List<LoginUser> recuperarTodos() throws ClassNotFoundException, SQLException {     
     
        String sentencaSelect = "SELECT * FROM LoginUser";     
        Connection connectionSelect = Conexao.getInstance().getConnection();     
        PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);     
        ResultSet resultSelect = statementSelect.executeQuery();     
             
        List<LoginUser> usuarios = new ArrayList<LoginUser>();     
        while (resultSelect.next()) {     
            usuarios.add( recuperarObjeto(resultSelect) );             
        }     
        statementSelect.close();     
               
        return usuarios;     
    }     
     
    public LoginUser recuperarObjeto(ResultSet resultSelect) throws SQLException {     
     
        LoginUser usuario = new LoginUser();     
        usuario.setUsuario(resultSelect.getString("usuario"));     
        usuario.setSenha(resultSelect.getString("senha"));
		return usuario;     
           
	}
   
}
a classe servicosusuario
import java.sql.SQLException;
import java.util.List;

import Modelo.LoginUser;

public class ServicosUsuario {   
  
    public String validarUsuarioNoSistema(String usuario, String senha) throws SQLException, ClassNotFoundException {   
  
        PersistenciaUsuario persistenciaUsuario = new PersistenciaUsuario();   
        List<LoginUser> usuarios = persistenciaUsuario.recuperarTodos();
        
        for (LoginUser usuario1 : usuarios) {   
            if (LoginUser.getUsuario().toUpperCase().equals(usuario) && LoginUser.getSenha().toUpperCase().equals(senha)) {   
                return usuario;   
            }   
        }   
  
        return null;   
    }   
}
a classe interfaceloginusuario
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import Modelo.LoginUser;


public class InterfaceLoginUsuario extends JFrame {

    private JTextField textUsuario;
    private JPasswordField textSenha;
    private JButton buttonAcessar;

    public void exibirFormulario() {
   
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
    public InterfaceLoginUsuario() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);

        textUsuario = new JTextField(20);
        textUsuario = new JPasswordField(15);
 
        buttonAcessar = new JButton("OK");
        buttonAcessar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {

                ServicosUsuario servicosUsuario = new ServicosUsuario();
                String usuario = null;
				try {
					usuario = servicosUsuario.validarUsuarioNoSistema
					    (textUsuario.getText(), new String(textSenha.getText()));
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

                if (usuario == null) {
                    JOptionPane.showMessageDialog(null, "Usuário e/ou senha inválido(s)!");
                }
                else {
 
                    Menu interfacePrincipal = new Menu(null, null);
                    interfacePrincipal.exibirMenu();
                }
            }
        });
        getContentPane().add(new JLabel("Usuário:"));
        getContentPane().add(textUsuario);
        getContentPane().add(new JLabel("Senha:"));
        getContentPane().add(textSenha);
    }
}
os getters e setters
package Modelo;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class LoginUser {  
  @Id
    private static String usuario;  
    private static String senha;
    
	public static String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public static String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;

	}  
    
}
D

a efetuar login vai entrar ai?

ou tem só essas classes ou tem mais…ta mais dificil esse login do que eu pensei muita classe

eu penso assim que seriam criados o getters e setters certo uma classe conexao…outra

classe efetuar login e o evento no botao eu axava que era só assim!nunca tinha feito um login antes era me racicioniio…

D

a classe principal main eu acabei tirando tbm…

ela só retornava pra mim os valores da tabela LoginUser mais nada…entao eu tirei…ai ficou a efetuar login alem dessas classes e eu postei!

D

desisto uahuahuaia

D

devo estar errando alguma coisa q eu nao sei…

N

daniferreira:
a classe principal main eu acabei tirando tbm…

ela só retornava pra mim os valores da tabela LoginUser mais nada…entao eu tirei…ai ficou a efetuar login alem dessas classes e eu postei!

Usa o formulário que criei no post anterior e faz sua chamada no Main.
Se tá retornando valores, perfeito!

Você pega esses valores e itera sobre eles. Faz a comparação: o usuário e a senha do objeto são iguais? Se sim, abre uma janela de mensagem: “Usuário válido!”. Se não, abre uma tela de mensagem: “Usuário e/ou senha incorreto(s).”

Não tem segredo, é isso que tô fazendo, se você analisar meu código.

D

oiee aquele seu formulario ele nao roda…java aplication…nao roda nao da certo

D

e a main só vai retorna valores se eu coloca static na variavel senha e usuario e se eu colocar a classe que grava usuario e senha no banco nao vai funcionar ai nao vai adiantar!

N

Dá uma olhada nesse exemplo que fiz, com as classes que falei e tudo o mais.
Faça as alterações na ConnectionFactory e apague o comentário na PersistenciaUsuario.

D

no seu código pra rodar só tem um erro nesta linha que eu vou te mostrar ai
fora isso axo q ele vai rodar normal unico erro que apresenta

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class PersistenciaUsuario {

	public List<Usuario> recuperarTodos() throws ClassNotFoundException,
			SQLException {

		String sentencaSelect = "SELECT * FROM USUARIOS";
		Connection connectionSelect = ConnectionFactory.getInstance()
				.getConnection();
		PreparedStatement statementSelect = connectionSelect
				.prepareStatement(sentencaSelect);
		ResultSet resultSelect = statementSelect.executeQuery();
		List<Usuario> usuarios = new ArrayList<Usuario>();

		while (resultSelect.next()) {
			usuarios.add(recuperarObjeto(resultSelect));
		}

		resultSelect.close();
		statementSelect.close();
		return usuarios;

		List<Usuario> usuarios = new ArrayList<Usuario>(); //erro ta aparecendo nesta linha

		usuarios.add(new Usuario("JOAO", "joao123"));
		usuarios.add(new Usuario("MARIA", "maria123"));
		usuarios.add(new Usuario("PEDRO", "pedro123"));
		usuarios.add(new Usuario("CARLOS", "carlos123"));
		usuarios.add(new Usuario("JOSE", "jose123"));
		return usuarios;
	}

	private Usuario recuperarObjeto(ResultSet resultSelect) throws SQLException {

		Usuario usuario = new Usuario();
		usuario.setNome(resultSelect.getString("NOME"));
		usuario.setSenha(resultSelect.getString("SENHA"));
		return usuario;

	}
}
N

Ah, é porque tem que criar a classe Usuário... hehe
Cria aí:

public class Usuario {

    private String usuario;
    private String senha;

    //getters e setters omitidos.
}

Tenta interpretar os erros antes de postá-los aqui.

D

valeu irmão deu tudo certoooo brigadaooo pela sua paciencia e ajudaaa brigadao mesmo \o

N

Disponha, cara. Mas uma dica: seja específico. Coloque os erros específicos quando tiverem, porque se não fica difícil interpretá-los e ajudar!

Adicione ao título do seu tópico [RESOLVIDO].

D

ta bom eu sou mulher uhauiahaiuah

Criado 25 de julho de 2011
Ultima resposta 27 de jul. de 2011
Respostas 35
Participantes 4