RESOLVIDO - Retorno de uma procedure

5 respostas
twohands

Bom dia galera, tudo blz?

Estou com um problema estranho no minimo, e o seguinte.

Estou desenvolvendo um sistema em jsf aqui, o que aconteceu e que todas as regras de negocio estão no banco de dados em forma de procedures, ou seja, ao inserir um determinado dado ele faz toda a validação no banco, e me retorna um código e uma mensagem de inserido, erro de validação ou algo do tipo.

Bom o que acontece e o seguinte, ao inserir o dado, caso aconteça um erro e o dado não seja inserido, ele me retorna o erro no resultset e mostro o erro na tela, porem se o dado e inserido, ele não retorna nada, acusa uma exception falando que não houve resultado, porem, e inserido o dado no banco, e se eu executo a proc direto no sqlserver com os mesmos parametros que inseri na tela, ele funciona normal, sem erro e me devolve o retorno certo.

Então, o que estou achando estranho e o fato de só estourar exception se ele consegue inserir, isso não e em apenas 1 proc, e sim em todas que fazem a inserção e aguaram um resultado, ja descartei o erro da proc, e to pensando se e algum problema com o result set ou coisa do tipo.

public void save(Tp_AtividadeVO vo) {
		try {
			
			ExceptionBD ex = new ExceptionBD();
			CallableStatement cs = connection.prepareCall("{call SP_CARREGA_TB_TIPO_ATIVIDADE(?) }");
			cs.setString(1, vo.getTipoatividade());
			
			rs = cs.executeQuery();

			while (rs.next()) {
				
				
				ex.setId(rs.getInt("CD_RETORNO"));
				ex.setMensagem(rs.getString("RETORNO"));
				
				System.out.println(ex.getId() + " " + ex.getMensagem());				
			}
			cs.close();
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}

Alguém passou por algo do tipo?

Vlw galera

5 Respostas

Andre_Fonseca

twohands:
Bom dia galera, tudo blz?

Estou com um problema estranho no minimo, e o seguinte.

Estou desenvolvendo um sistema em jsf aqui, o que aconteceu e que todas as regras de negocio estão no banco de dados em forma de procedures, ou seja, ao inserir um determinado dado ele faz toda a validação no banco, e me retorna um código e uma mensagem de inserido, erro de validação ou algo do tipo.

Bom o que acontece e o seguinte, ao inserir o dado, caso aconteça um erro e o dado não seja inserido, ele me retorna o erro no resultset e mostro o erro na tela, porem se o dado e inserido, ele não retorna nada, acusa uma exception falando que não houve resultado, porem, e inserido o dado no banco, e se eu executo a proc direto no sqlserver com os mesmos parametros que inseri na tela, ele funciona normal, sem erro e me devolve o retorno certo.

Então, o que estou achando estranho e o fato de só estourar exception se ele consegue inserir, isso não e em apenas 1 proc, e sim em todas que fazem a inserção e aguaram um resultado, ja descartei o erro da proc, e to pensando se e algum problema com o result set ou coisa do tipo.

public void save(Tp_AtividadeVO vo) {
		try {
			
			ExceptionBD ex = new ExceptionBD();
			cs = connection.prepareCall("{call SP_CARREGA_TB_TIPO_ATIVIDADE(?) }");
			cs.setString(1, vo.getTipoatividade());
			
			rs = cs.executeQuery();

			while (rs.next()) {
				
				
				ex.setId(rs.getInt("CD_RETORNO"));
				ex.setMensagem(rs.getString("RETORNO"));
				
				System.out.println(ex.getId() + " " + ex.getMensagem());				
			}
			cs.close();
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}

Vlw galera

oi,

ao invés de fazer o executeQuery use o execute, também registre os parametros de saída

dá uma olhada neste exemplo

abs

Alguém passou por algo do tipo?

alves.Felipe
cara.. pior que testei aqui e funcionou .. SQLServer
CallableStatement call = getJdbcTemplate().getDataSource().getConnection().prepareCall("{call CONSULTA_DOACAO_PRODUTO}");
		
		
//		call.execute();
		ResultSet rs = call.executeQuery();
		
		while(rs.next())
		{
			System.out.println("rs");
}
tenta fazer sem passar parametro..
twohands
alves.Felipe:
cara.. pior que testei aqui e funcionou .. SQLServer
CallableStatement call = getJdbcTemplate().getDataSource().getConnection().prepareCall("{call CONSULTA_DOACAO_PRODUTO}");
		
		
//		call.execute();
		ResultSet rs = call.executeQuery();
		
		while(rs.next())
		{
			System.out.println("rs");
}
tenta fazer sem passar parametro..

Então, sem parâmetro funciona, eu uso outras procs para carregar alguns campos, mais nesses casos eu uso a proc só para passar um parâmetro para ser feito um select, nesse caso eu passo um parâmetro para fazer um insert, e aguardo uma msg de retorno, porem se insere a proc não devolve retorno, e se da algum erro e não insere, ela me da retorno. o que torna isso realmente bizarro, vou testar do jeito que o Andre postou, e já coloco o que deu aqui.

twohands

Bom, realmente não e possível pegar o retorno que eu espero pelo resultSet, como ele sempre pega um cursor, e não e o que ocorre no caso.

Sendo assim descobri uma solução segunda solução que seria uma tabela só para as msg que preciso pegar, assim a procedure só me retorna um id e por esse id eu pego o retorno em outra tabela.

Vlw a ajuda pessoal.

alves.Felipe

mas se vc consegue pegar o id, qual o problema para pegar a mensagem??não é a mesma coisa?
não entendi agora…rs

Criado 7 de novembro de 2012
Ultima resposta 7 de nov. de 2012
Respostas 5
Participantes 3