Dúvida Parametro de retorno de procedure[RESOLVIDO]

Boa tarde pessoal… tudo bem???

É o seguinte… estou com uma pequena dúvida… Se puderem me ajudar ficarei muito grata…

Tenho um método que chama uma procedure e me retorna um parametro contendo o codigo de um pedido(essa procedure retorna outros parametros mas não vem ao caso).

Tenho outro método que faz um select e uma das condições para o select é passar o id do pedido. Agora que vem a dúvida. O id que eu preciso passar é o que a procedure me retornou.

É possível eu pegar esse valor de retorno e passar no meu select???

Ambos métodos estão na mesma classe.

Bom pessoal, se sim…Poderiam me dizer como faço???
se não, há uma outra solução???

Obrigada

Sim é possível!
Mas eu precisaria de mais detalhes pra te informar como fazer isto.
Uma outra classe acessa esta classe e chama estes métodos ?
Ou vc quer q dentro da mesma classe seja feito isso ?
Estes métodos são utilizados em outros locais do sistema ?

Está muito vago sua dúvida em cima de um código já montado.
Mostre o código e diga mais precisamente o q está fazendo.

aluisiodsv,

Em primeiro lugar obrigada por responder…
É o seguinte…

Na mesma classe tenho dois métodos, um que inclui e exclui item e outro que busca produtos similares.

[Vou colocar o código simplificado pq ele é gigante]

private boolean executaInclusaoExclusaoItemPedidoVenda	( UserLoginBean userBean, PedidoVendaBean pedidoVendaBean, ItemPedidoVendaBean itemPedidoVendaBean, String tipoAcao ) throws InvalidException, CommerceException{
		Connection con = null;
		CallableStatement cs = null;
		try{
			con = super.getConnection();
			cs = con.prepareCall( "{ call PRCD_PVD_GERAL_JAVA(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }" );

....

cs.registerOutParameter( 7, Types.INTEGER );
itemPedidoVendaBean.setCodigoPedido( new Integer( cs.getInt( 7 ) ) );

....

}

Esse é o método que inclui ou exclui produtos…
Ele chama uma procedure e um dos retornos é o código do Pedido.

Tenho outro método que até então está assim

public ListaProdutoSimilarBean getListaProdutoSimilarBean(UserLoginBean userLoginBean, PedidoVendaBean pedidoVendaBean, Long codigoEAN ) throws CommerceException{

		Connection con = null;
		CallableStatement cs = null;
		CallableStatement csa = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		ListaProdutoSimilarBean listaProdutoSimilarBean = null;
		StringBuffer query = new StringBuffer();
		
		try{
			
			con = super.getConnection();
			
			
			cs = con.prepareCall( "{call PRCD_PROD_SIMILAR_JAVA(?, ?, ?, ?, ?) } " );
			cs.setInt(1,userLoginBean.getUnidadeNegocio());
			cs.setInt(2,userLoginBean.getEmpresa());
			cs.setInt(3, pedidoVendaBean.getCodigoPedido() );
			cs.setLong(4, codigoEAN.intValue());
			cs.registerOutParameter(5,Types.VARCHAR);		
			
			cs.executeUpdate();
			System.out.println(cs.getString(5));
			
			if(cs.getString( 5 ).equals("S")){
				query.append( " SELECT " );				
				query.append( " PS.ID_PRO, " );
				query.append( " PS.ID_PRO_SIM, " );
				query.append( " PS.NM_PRO_SIM, " );
				query.append( " PS.QT_FIS_EMP, " );
				query.append( " PS.QT_FIS_CDI " );
				query.append( " FROM " );
				query.append( " AUX_ITEM_PEDIDO_VENDA_SIMILAR PS " );
				query.append( " WHERE " );
				query.append( " PS.ID_UNN = ? AND " );
				query.append( " PS.ID_EMP = ? AND " );
				query.append( " PS.ID_PVD = ? " );
				
				ps = con.prepareStatement( query.toString() );
				ps.setInt(1,userLoginBean.getUnidadeNegocio());
				ps.setInt(2,userLoginBean.getEmpresa());
				ps.setInt(3, pedidoVendaBean.getCodigoPedido() );
				
				rs = ps.executeQuery();
				
				if( rs.next() ){				
					listaProdutoSimilarBean = new ListaProdutoSimilarBean();
					do{
						ProdutoSimilarBean produtoSimilarBean;
					    	produtoSimilarBean = new ProdutoSimilarBean();						
						produtoSimilarBean.setIdProduto( new Integer( rs.getInt( "ID_PRO" )));
						produtoSimilarBean.setIdProdutoSimilar( new Integer( rs.getInt( "ID_PRO_SIM" )));
						produtoSimilarBean.setNomeProdutoSimilar( new String(rs.getString( "NM_PRO_SIM" )));
						produtoSimilarBean.setQtdFisicaEmpresa( new Integer( rs.getInt( "QT_FIS_EMP" )));
						produtoSimilarBean.setQtdFisicaCDI( new Integer (rs.getInt( "QT_FIS_CDI" )));
						listaProdutoSimilarBean.addProdutoSimilarBean(produtoSimilarBean);
					}while( rs.next() );						
						StringBuffer delete = new StringBuffer();
						delete.append( " DELETE ");
						delete.append( " AUX_ITEM_PEDIDO_VENDA_SIMILAR ");
						delete.append( " WHERE ");
						delete.append( " ID_UNN = ? AND " );
						delete.append( " ID_EMP = ? AND " );
						delete.append( " ID_PVD = ? ");
						ps = con.prepareStatement( delete.toString() );
						ps.setInt(1 ,userLoginBean.getUnidadeNegocio());
						ps.setInt(2,userLoginBean.getEmpresa());
						ps.setInt(3,pedidoVendaBean.getCodigoPedido() );
						ps.executeUpdate();	
						con.commit();
						
				}
			}
			return listaProdutoSimilarBean;
		}catch( SQLException e ){
			throw new CommerceException( e.getMessage(), e.getErrorCode() );			
		}

O que eu preciso é que dentro desse meu ultimo método, em todos os lugares que passei " pedidoVendaBean.getCodigoPedido() " , preciso passar aquele retorno da procedure do primeiro método.
Relembrando que eles estão dentro da mesma classe.

Bom, com isso deu pra entender???

Esse código precisa ser muito melhorado, tem muita coisa errada aí. Mas isso é outra coisa.

O primeiro método, conforme está escrito, retorna um tipo boolean (true|false), e pelo q entendi, vc precisa de um código, provavelmente um integer.
Então o retorno daquele primeiro método não é do mesmo tipo q vc precisa.
Não vai dar certo fazer isto.

Vc diz q um dos retornos é o código. Mas o método só retorna uma coisa. Que no caso é o boolean.

aluisiodsv,

Mais uma vez, obrigada por me ajudar.

Consegue resolver o problema.

SOLUÇÃO

Na minha action que busca a lista dos produtos similares coloquei um parâmetro para ela passar. Esse parâmetro viria de outra Action e com isso eu teria o itemPedidoVendaBean.getCodigo() que era o que eu estava precisando.
Quanto aos erros, isso tenho que ver aos poucos. Pois ainda sou iniciante no assunto, e aqui na empresa já peguei o sistema pronto.

Mais uma vez, obrigada

Att
Daniele

Sabia q só faltava pensar um pouco mais, pq eu não estava entendendo o pq vc qria o retorno do método de cima no método de baixo, sem acessá-los de outro lugar.

Mas é isso aí.

O interessante com o java é q qnto mais se desenvolve, melhor, e mais consciente do q faz, vc fica!

Pois é…

As vezes são coisas bestas…

mas to aprendendo muito.

Estou na área faz 6 meses, sendo dois com C# e 4 com Java…E já aprendi muito…

Obrigada

Gostou mais do java ou do c# ??

eu sou TOTALMENTE JAVA…
Embora a primeira linguagem que aprendi foi C#, quando aprendi Java me apaixonei…rs

mas agora terei que mexer com C# tb. Pq aqui na empresa eles precisam de um webservice em c#. E como a unica pessoa que mexe com C#(embora não saiba nada de webservice) sou eu, então terei que apanhar…rs

Existem alguns facilitadores para trabalharmos com jdbc… SPRING!!!

Abrange proc, resultSet e xyz.
vide

http://static.springsource.org/spring/docs/2.0.8/reference/jdbc.html

Meu exemplo

	class ProcedureMy extends StoredProcedure{
		public ProcedureMy(DataSource ds){
			super(ds, "PACKAGE.PROC");
			
			this.declareParameter(new SqlParameter("name", Types.VARCHAR));
			
			RowMapper rowMapper = new RowMapper(){ 
				public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
					
					MyObject my = new MyObject();
					my.set(rs.getInt("resultado"));
					return  my;
				}
			};						
			this.declareParameter(new SqlOutParameter("p_retorno", OracleTypes.CURSOR, rowMapper));
			this.compile();
		}
	}

Ou o próprio HIBERNATE.

Melhor que escrever uma linha de código, é excluir linhas de códigos reutilizando oq já existe.
:wink:

lelodois,

Se eu fosse uma pessoa normal(ou seja, se não fosse programadora.rs), eu diria: Que coisa de louco…

Mas como sou uma…

De inicio, sinceramente não entendi nada…

Mas vou dar uma lida no material que me passou para tentar entender…

[quote=dsystem]lelodois,
Se eu fosse uma pessoa normal(ou seja, se não fosse programadora.rs), eu diria: Que coisa de louco…
Mas como sou uma…
De inicio, sinceramente não entendi nada…
Mas vou dar uma lida no material que me passou para tentar entender…
[/quote]

É uma abordagem diferente e fácil de aprender, a princípio é estranho.

Qualquer dúvida poste ai.
:wink: