RESOLVIDO - Retorno de uma procedure

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

[quote=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[/quote]

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?

cara… pior que testei aqui e funcionou …
SQLServer

[code]CallableStatement call = getJdbcTemplate().getDataSource().getConnection().prepareCall("{call CONSULTA_DOACAO_PRODUTO}");

// call.execute();
ResultSet rs = call.executeQuery();

	while(rs.next())
	{
		System.out.println("rs");

}[/code]
tenta fazer sem passar parametro…

[quote=alves.Felipe]cara… pior que testei aqui e funcionou …
SQLServer

[code]CallableStatement call = getJdbcTemplate().getDataSource().getConnection().prepareCall("{call CONSULTA_DOACAO_PRODUTO}");

// call.execute();
ResultSet rs = call.executeQuery();

	while(rs.next())
	{
		System.out.println("rs");

}[/code]
tenta fazer sem passar parametro…
[/quote]

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.

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.

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