Retornar mais de um valor no Banco de Dados - [RESOLVIDO]

4 respostas
Raytek

E ai pessoal do guj tenho este método abaixo que me retorna verdadeiro ou falso, mas eu gostaria que ele me retornasse os valores tipo e ativo, tanto na classe do login quando na classe principal.

Método do login - Classe UsuarioDAO

public boolean verificaLogin(Usuario use){
		
		Connection con = conecta();
		Statement s = null;
		boolean teste = false;
		
		try{
			
			String SQLLogin = "select * from usuario where login = '"+use.getLogin()+"' and senha = '"+use.getSenha()+"';";
			
			s = con.createStatement();  
			ResultSet rs = s.executeQuery(SQLLogin);
			
			if(rs.next()){
				
				use.setTipo(rs.getInt("tipo"));//valores que eu quero retornar também.
				use.setAtivo(rs.getInt("ativo"));//valores que eu quero retornar também.
				teste = true;
				
			}else{
				JOptionPane.showMessageDialog(null, "Login e/ou Senha Incorretos.", "Falha na altenticação",0);
			}
			
			rs.close();
			
		}catch(SQLException e){
			
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, e,"Erro no SQL",JOptionPane.ERROR_MESSAGE);
			
		}finally{
			
			try{
				
				s.close();
				con.close();
				
			}catch(Exception e){
				
				e.printStackTrace();
				JOptionPane.showMessageDialog(null, e,"Erro ao fechar conexão",JOptionPane.ERROR_MESSAGE);
				
			}
			
		}
		return teste;
		
	}

Classe que recebe os valores para o teste. - Classe Login

public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
		if(e.getSource() == btnLogin)
		{
		
			user.setLogin(txtLogin.getText());
			user.setSenha(txtSenha.getText());
			boolean teste = false;
			teste = use.verificaLogin(user);
			if(teste == true){
				
				this.dispose();
				new Tela();
				
			}

		}else{
			if(e.getSource() == btnLimpar)
			{
				txtLogin.setText(null);
				txtSenha.setText(null);
			}else{
				if(e.getSource() == btnSair)
				{
					System.exit(0);
				}
			}
		}
		
	}

E por último vem a classe principal onde tenho um if que verifica se o login esta ativo ou não e também ativa ou desativa objetos gráficos de acordo com o tipo do login.

Muito obrigado pela atenção e até logo…

Att.: Raytek.

4 Respostas

A

Esse user que você tá passando como parâmetro está recebendo dentro do seu método verificaLogin os valores que você quer usar

Experimente fazer isso pra ver o que acontece:

System.out.println(user.getTipo());
System.out.println(user.getAtivo());

Claro que se esses gets estiverem definidos…

Só mais uma dica: o correto é “autenticação”

Raytek

Para retornar os tres valores criei uma string que recebe tres valores separados por uma tralha “valor1#valor2#valor3” depois recortei esses valores aonde a tralha aparece sendo que o primeiro valor é booleano e os outros são inteiros. Só estou tendo trabalho para retornar esses valores para a classe tela. Aqui estão as classes:

Classe UsuarioDAO()

public String verificaLogin(Usuario use){

		

		Connection con = conecta();

		Statement s = null;

		String teste = "";

		

		try{

			

			String SQLLogin = "select * from usuario where login = '"+use.getLogin()+"' and senha = '"+use.getSenha()+"';";

			

			s = con.createStatement();  

			ResultSet rs = s.executeQuery(SQLLogin);

			

			if(rs.next()){

				

				use.setTipo(rs.getInt("tipo"));

				use.setAtivo(rs.getInt("ativo"));

				teste += "true#";

				teste += use.getAtivo()+"#";

				teste += use.getTipo()+"#";

				

			}else{

				JOptionPane.showMessageDialog(null, "Login e/ou Senha Incorretos.", "Falha na altenticação",0);

			}

			

			rs.close();

			

		}catch(SQLException e){

			

			e.printStackTrace();

			JOptionPane.showMessageDialog(null, e,"Erro no SQL",JOptionPane.ERROR_MESSAGE);

			

		}finally{

			

			try{

				

				s.close();

				con.close();

				

			}catch(Exception e){

				

				e.printStackTrace();

				JOptionPane.showMessageDialog(null, e,"Erro ao fechar conexão",JOptionPane.ERROR_MESSAGE);

				

			}

			

		}

		return teste;

		

	}

Classe Login()

public void actionPerformed(ActionEvent e) {

		// TODO Auto-generated method stub

		

		if(e.getSource() == btnLogin)

		{

		

			user.setLogin(txtLogin.getText());

			user.setSenha(txtSenha.getText());

			teste = use.verificaLogin(user);

			

			temp = teste.split("#");

			

			aut = Boolean.parseBoolean(temp[0]);

			

			if(aut == true){

				

				this.dispose();

				new Tela(temp);

			}



		}else{

			if(e.getSource() == btnLimpar)

			{

				txtLogin.setText(null);

				txtSenha.setText(null);

			}else{

				if(e.getSource() == btnSair)

				{

					System.exit(0);

				}

			}

		}

		

	}

Classe Tela()

private String[] token;

public Tela(String[] temp){

    	

    	this.token = temp;

    	

    }

    

    boolean aut = Boolean.parseBoolean(token[0]);
    ativo = Integer.parseInt(token[1]);

    tipo = Integer.parseInt(token[2]);

Poderiam me ajudar a achar o erro, não sei se o erro esta na hora de converter o valor do array ou na passagem de parâmetro.

Raytek

Alguém sabe onde está o erro?

Raytek

Obrigado a todos que responderam, ja consegui resolver o problema que neste caso era que eu estava passando um vetor por parâmetro mas por o mesmo não ser um tipo primitivo e por isso mutável seu valor se perdia - pois na verdade o que estava sendo passado era uma referencia do mesmo - na hora que eu o passava por parâmetro, todavia eu o desmembrei em variaveis menores que eram primitivas - e portanto imutáveis - conseguindo assim que seu valor fosse passado com sucesso.

Criado 10 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 4
Participantes 2