Resultset

Estou com problemas para o retorno de um count(campo).

Executando a query ela retorna um valor correto mas ao pegar o retorno do ResultSet não estou conseguindo.


Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		// Recupera uma sessão do hibernate
		Session session = HibernateUtil.getSession();

		int nextVal = 0;

		try {

			String sql = " SELECT MAX(CC.NR) " 
					+" FROM TB_CONTRATOS CC, "
					+" CA_TB_ADITIVOS A "
					+" WHERE A.CD_ADITIVO = CC.CD_CONTRATO "
					+" AND A.CD_CONTRATO = (SELECT CD_CONTRATO FROM TB_CONTRATO "
					+" WHERE NR = ?) "	
					+" AND NOT EXISTS (SELECT 1	"
					+" FROM SEQUENCE_CONTRATO S, "
					+" CONTRATO_SEQUENCE C " 
					+" WHERE C.CD_SEQUENCE = S.CD_SEQUENCE "
					+" AND S.CD_TIPO = ? "
				    +" AND C.CD_CONTRATO = CC.CD_CONTRATO) ";
			
			// Recupera a conexão com a base de dados
			con = session.connection();
			// Cria o statement com a query
			stmt = con.prepareStatement(sql);
			stmt.setInt(1, cc);
			stmt.setInt(2, new int(5);
			
			// Executa a query (statement)
			rs = stmt.executeQuery();

			// Retorna o próximo valor da sequência
			if (rs.next()) {
				nextVal = rs.getInt(1);
			} else {
				nextVal = 0;
			}

			// Fecha os objetos de acesso a base de dados
			rs.close();

Qual erro que dá?

Não está dando erro, está retornando sempre 0 entrando no else.
Mas quando executo a query direto no banco retorna o valor correto.

pelo jeito é o seu ResultSet que está retornando nulo

Já tentou debugar a aplicação?
Coloca um breakpoint na linha 34, para ver se o Resultset está sendo preenchido!
Flw!

Cara,

Você está usando o rs.next dentro do if,
quando você usa o next você muda o ponteiro para o próximo registro,
que no seu caso não existe.

Mude a forma como está fazendo este if

Troca todo o seu if por isso

nextVal = rs.getInt(1) == null ? 0 : rs.getInt(1);

Pelo que entendi seu problema está no teu select.

analise-o e veja os dados do seu banco de dados.

pode ser que tua condicao realmente nao traga nenhuma linha.

:?

É possível entrar no else com uma query dessas? Sem falar que nem precisaria do else, já que nextVal já tem o valor 0 dentro dele.

[quote=fmad27]
Você está usando o rs.next dentro do if,
quando você usa o next você muda o ponteiro para o próximo registro,
que no seu caso não existe.[/quote]

rs.next quando usado pela primeira vez aponta para o primeiro registro. Antes do next, o cursor está posicionado antes do primeiro registro.