resultSet retornando null, mas query está correta

4 respostas
W

Olá pessoal,
será que alguém saberia dizer o motivo do código abaixo não funcionar?
Vale dizer que este mesmo código funcionava antes de eu formatar minha máquina. Eu configurei o ambiente novamente e usei o mesmo código e a query abaixo retorna o resultado correto quando executado diretamente no banco de dados, mas dentro do código java não retorna.
O resultSet não está sendo populado, mas os argumentos passados estão corretos e existem no banco.
Falta alguma coisa? Alguma biblioteca? Já testei por horas, olhei tudo e parece que está tudo correto, então porque não entra no while(resultSet.next())?
Se eu coloco System.out.println("********** IDLOGIN = " + resultSet.getInt("IDLOGIN")); antes de while(resultSet.next()) dá a mensagem:
[color=red]ResultSet.next não foi chamado[/color] isso dá alguma pista?
Agradeço alguma luz.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.sistemaweb.connection.ConnectionFactory;
import br.com.sistemaweb.vo.Login;

public Login verificarLogin(String nome, String senha) throws SQLException{
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		Login result = null;
		
		try {
			StringBuffer sql = new StringBuffer();
			sql.append("SELECT ");
			sql.append( 	"IDLOGIN, ");
			sql.append( 	"NOME, ");
			sql.append(		"ADMINISTRATOR, ");
			sql.append(		"SENHA ");
			sql.append("FROM ");
			sql.append(		"LOGIN ");
			sql.append("WHERE ");
			sql.append("NOME LIKE ? ");
			sql.append("AND SENHA LIKE ? ");
			preparedStatement = this.connection.prepareStatement(sql.toString());
			preparedStatement.setString(1, nome);
			preparedStatement.setString(2, senha);
			resultSet = preparedStatement.executeQuery();
			
			while(resultSet.next()){
				result = new Login();
				result.setIdLogin(resultSet.getInt("IDLOGIN"));
				result.setNome(resultSet.getString("NOME"));
				result.setAdministrator(resultSet.getString("ADMINISTRATOR"));
				result.setSenha(resultSet.getString("SENHA"));
			}
			return result;

		} catch (SQLException sqle) {
			throw new SQLException(sqle.toString());
		}
	}

4 Respostas

tiagoscd

Olá!

Tem certeza de que a conexão com o banco de dados realmente está aberta? Se não, tente adicionar o seguinte código antes de executar o PreparedStatement:

if (this.connection.isClosed()) { // código para conectar seu banco }

Espero ter ajudado, até mais!

W

Oi amigo, não é problema com conexão com o banco, como eu disse, esse código funcionava perfeitamente antes de formatar a máquina.
E fiz o teste agora no MySQL e funciona.
O problema está no oracle. Eu criei a tabela e no campo Idlogin eu criei uma sequence, nao sei se isso está influenciando.

W

Bom, descobri o que estava acontecendo.
Pra finalizar o tópico, foi o seguinte:
Eu acrescentava um usuário no banco e testava a página que chamava o dao e não funcionava, pois eu deveria fechar o PL/SQL e entrar de novo, aí reconhecia o usuário. Só não sei por que precisava sair do PL/SQL uma vez que as queries funcionavam sem precisar sair e entrar de novo. Mas para o código Java funcionar, isso está sendo necessário.

L

não tah faltando dar commit no insert que vc acabou de fazer?

Criado 1 de março de 2009
Ultima resposta 3 de mar. de 2009
Respostas 4
Participantes 3