SQLException sistema de Login

5 respostas
B

Boa tarde,

Estou desenvolvendo um sistema de login com SQL Server 2008 R2.

Eu tenho 2 classes uma delas LoginDB e a outra de UILogin, para a interface com o usuário.

package source.DB;

import java.sql.*;
import factory.*;
import javax.swing.*;

public class LoginDB {
	
	private Connection connection;
	
	//String nomeUsuario;
	//String senha;
	
	
	public LoginDB(){
		this.connection = new ConnectionFactory().getConnection();
	}

	
	public int validaLogin(String nomeUser, String pass) throws SQLException{
		
		String sql = "SELECT nomeUsuario, senha from tabela_teste" +
					 "WHERE nomeUsuario='"+nomeUser+"'" +
					 " AND senha='"+pass+"'";
		
		int auxiliar=0;
		
		Statement stmt = null;

		
		try{
			stmt=connection.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			
			while(rs.next()){
				auxiliar=auxiliar + 1;
			}
			connection.close();
		}
		
		catch(SQLException u){
			throw new SQLException(u);
		}
		
		return auxiliar;
	}
	
}
UILogin - Action Listener do Botao de Login...

		JButton btnLogin = new JButton("Login");
		btnLogin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				try{
					LoginDB logindb = new LoginDB();
					
					int count = logindb.validaLogin(textFieldNomeUsuario.getText(), passwordField.getText());
					
					if (count == 1){
						UIControle.UIControl();
					}
					else if (count > 1){
						JOptionPane.showMessageDialog(null, "Usuário duplicado no Bando de Dados. Contate o administrador.");
					}
					
				}
				catch(SQLException ex){
					JOptionPane.showMessageDialog(null, "O usuário "+textFieldNomeUsuario.getText()+" não existe no Bando de Dados!");
				}
						
			}
		});

Minha ideia foi a seguinte. Acessar o banco de dados e verificar a quantidade de linhas que há com o nome de usuario e senha digitados nos Textbox. Havendo 1 linha apenas, acesso concedido e etc…

O meu problema é o seguinte. Para qualquer valor que tenha no textbox de usuario e senha, mesmo que exista esse cadastro no banco de dados, o programa me retorna o SQLException, ou seja, me retorna o JOptionPane com a mensagem: “O usuário “+textFieldNomeUsuario.getText()+” não existe no Bando de Dados!”.

Qual o possivel erro que posso estar cometendo nesse programa?

Agradeço desde já.

5 Respostas

R

Não sei se é esse o erro, mas no seu SQL:

String sql = "SELECT nomeUsuario, senha from tabela_teste" +  
                     "WHERE nomeUsuario='"+nomeUser+"'" +  
                     " AND senha='"+pass+"'";

Voce ta passando 2 parametros, so que se voce perceber, o nomeUser, tem que ser IGUAL (EXATAMENTE O MESMO) ao nomeUsuario, pois voce esta usando a expressao ‘=’, entao, quando voce digita o nome do usuario, tem que ser exatamente como esta no banco, inclusive acentuacao e se é maiuscula e minuscula.

Outra coisa, aqui neste trecho:

catch(SQLException ex){ JOptionPane.showMessageDialog(null, "O usuário "+textFieldNomeUsuario.getText()+" não existe no Bando de Dados!"); System.out.print(ex.printStackTrace()); }

Acrescente uma saida no console, e nessa saida voce poe o stackTrace, que com certeza ira mostrar realmente qual o erro. Igual como fiz ai em cima.

System.out.print(ex.printStackTrace());

B

System.out.print(ex.printStackTrace());
isso me mostra um erro no programa quando eu coloco essa linha.
Ele me fala que o método print no tipo PrintStram não é aplicável para os argumentos (void).

Sem essa linha está funcionando agora.
Eu não entendi muito bem essa linha. Ela serve para imprimir no console o tipo de exceção que ocorreu no programa??

Obrigado pela ajuda!!

R

é porque printStackTrace é void hehehe, foi mal, tenta ex.getMessage() , tem varios metodos la que retornam uma string mano, fuça ae.

R

isso mesmo.

B

Ahh tah… haha
Valeu!!!
Eu vou dar um fuçada aqui, podexa!! =D

Criado 14 de janeiro de 2013
Ultima resposta 14 de jan. de 2013
Respostas 5
Participantes 2