[RESOLVIDO] Como saber de qual tabela veio determinada consulta

4 respostas
lucas_guj

Pessoal,

Em minha aplicação java, eu tenho uma classe UsuarioDAO que tem o seguinte código:

public int procuraUsuario( Usuario usuario ) {
        try {
            // Cria a consulta de usuários no banco de dados.
            PreparedStatement consultaUsuario = connection.prepareStatement( "SELECT * FROM alunos WHERE Usuario = ? AND Senha = ? UNION SELECT * FROM professores WHERE Usuario = ? AND Senha = ?" );
            // Passa o nome de usuário e senha digitados pelo usuário na tela de login para a consulta
            consultaUsuario.setString( 1, usuario.getUsuario() );
            consultaUsuario.setString( 2, usuario.getSenha() );
            consultaUsuario.setString( 3, usuario.getUsuario() );
            consultaUsuario.setString( 4, usuario.getSenha() );
            
            resultSet = consultaUsuario.executeQuery();
            
            if( resultSet.next() == true ) {
                // retorna um número se existir o usuário, ou seja, a consulta foi bem sucedida.
            }
            else {
                // retorna um número se não existir o usuário
            }
        }
        catch( SQLException sqlE ) {
            throw new RuntimeException( sqlE );
        }
        
        return -1;
    }  // fim do método procuraUsuario

Como vocês podem ver, eu consulto em duas tabelas com a query:
“SELECT * FROM alunos WHERE Usuario = ? AND Senha = ? UNION SELECT * FROM professores WHERE Usuario = ? AND Senha = ?”

Eu gostaria de saber se tem alguma forma de eu fazer para saber de qual tabela veio o resultado. Se veio da tabela alunos ou professores. Porque quando eu faço isso:

resultSet.next()

Não tem como saber de qual tabela veio. E mais uma coisa, eu uso if ao invés de while porque minha consulta é específica, ou ele acha, ou não acha.

4 Respostas

A

Dá pra vc fazer assim:

Quando percorrer o resultset, leia o que retornar na coluna tabela_origem e saberás de onde veio o registro.

lucas_guj

ADEMILTON:
Dá pra vc fazer assim:

Quando percorrer o resultset, leia o que retornar na coluna tabela_origem e saberás de onde veio o registro.

Poderia me explicar um pouco melhor pois não consegui entender a query que você usou.

A

Fazendo uma correção… na resposta eu vi que faltou um “_” no alias do campo que criei. O correto é isso:

SELECT usuario, 'alunos' as tabela_origem FROM alunos WHERE Usuario = ? AND Senha = ? UNION SELECT usuario, 'professores' FROM professores WHERE Usuario = ? AND Senha = ?

Executando essa query, vamos supor que você tenha o usuário JOSE cadastrado na tabela alunos. O resultado será isso:

usuario tabela_origem


JOSE alunos

E se você tiver o usuário JOAO cadastrado na tabela professores, o resultado será este:

usuario tabela_origem


JOAO professores

Se ainda não ficou claro pra você, experimente rodar simplesmente isso no seu banco:

Vai retornar uma linha para cada usuário que você tiver cadastrado lá, e o conteúdo da coluna tabela_origem será sempre “alunos”

E se você rodar isso:

virão todos os usuários e agora o conteúdo da coluna tabela_origem será “professores”

Desculpe se não expliquei melhor, eu sou meio ruim com isso… mas fazendo na prática você vai ver que dá certo.

lucas_guj

Agora você explicou muito bem. Fiz os teste e deu certo, muito obrigado.

Criado 6 de agosto de 2012
Ultima resposta 7 de ago. de 2012
Respostas 4
Participantes 2