Stored procedures

ola galera!!

estou pegando um projeto em andamento,

aqui usamos procedures,

tudo depende do banco,

como faço pra usar essas procedures

alguem pode dar uma ajuda?

EDIT - o nome é “stored procedures” ou “procedimentos armazenados”.

Qual banco ?
Não se desespere, escreva de forma mais clara, tente ser mais abrangente no seu problema.

Segue exemplo para banco Oracle:

[code]CallableStatement ctsmt = conexao.prepareCall("{call manter_clientes_package.MBUSCA_CIDADE(?,?,?,?)}");

ctsmt.setString(1, “nome da cidade”);
ctsmt.registerOutParameter(2, Types.VARCHAR);
ctsmt.registerOutParameter(3, Types.VARCHAR);
ctsmt.registerOutParameter(4, Types.VARCHAR);

ctsmt.execute();[/code]

No exemplo acima é chamada uma procedure de banco Oracle situada dentro de uma package.

Dos 4 parâmetros, o primeiro é IN e os 3 últimos são OUT.

Para “pegar” o conteúdo dos 3 campos OUT use

ctsmt.getString(índice) onde índice vai de 2 a 4, nesse caso.

Para uma função com banco Oracle segue o exemplo:

[code]CallableStatement ctsmt = conn.prepareCall("{? = call manter_clientes_package.FEXISTE_CPF(?,?)}");

ctsmt.registerOutParameter(1, Types.VARCHAR);
ctsmt.setString(2, pCoCpf);
ctsmt.registerOutParameter(3, Types.VARCHAR);

ctsmt.execute();[/code]

Onde o primeiro “?” identifica o resultado da função, tipo OUT recuperado por ctsmt.getString(1)

Nesse caso a função possui dois parâmetros, o primeiro IN e o segundo OUT.

Verifique os tipos de dados dos parâmetros para poder usar o setters respectivos. Campos varchar2 utilize setString, campos number utilize setInt e assim por diante.

Meu banco é Oracle

obrigado pelas explicações,

estou incluindo um campo novo uma obs. em um cadartro,
fiz tudo que esplicaram,
quando vou salvar dá todas as mensagens de salvo com sucesso mas quando vou verificar ele não aparece lá,

não sei se falta fezer mais alguma coisa.

O Oracle, por padrão, requer que você use o comando COMMIT para que as alterações sejam efetivadas. (Você está usando o SQL*Plus ? )

Verifique se não faltou o comando conexao.commit().

São as procedures que salvam as informações no banco??

foi isto que fiz,

public String emp_ins_obs(Employee_Param eparam, String employee_obs) throws Exception {
CallableStatement cstmt = null;
LoginUsuarioForm user_name = new LoginUsuarioForm();

	try{
		
		conn = getConnection();			
		cstmt = conn.prepareCall("{ CALL PR_EMP_INS_OBS(?,?,?,?) }");

		
		
		cstmt.setLong(1, eparam.getCompany_code());
		cstmt.setLong(2, eparam.getEmployee_code());
		cstmt.setString(3,employee_obs);
		cstmt.setString(4,user_name.getUsuario());
		   
		//PARAMETRO DE SAIDA
		cstmt.registerOutParameter(5,OracleTypes.VARCHAR); //Return Code	
		cstmt.registerOutParameter(6,OracleTypes.VARCHAR); //Company_Return
		cstmt.registerOutParameter(7,OracleTypes.VARCHAR); //Employee_Return
		
		//executar a procedure
		cstmt.execute();	
		
		
		eparam.setEmployee_return_msg(cstmt.getString(9));
		
		return cstmt.getString(2).substring(0,1);
		
		
		
	}catch (Exception e){
		throw new Exception("EmployeeDAOImpl - pr_emp_ins_obs: " + e.getMessage());
	}finally{
		closeConnection(conn);
		closeCallableStatement(cstmt);
	}
}

as procedures são feitas em PL

minha conexão é por um pool

Marlise, como é que é???

Aqui você tem 4 parâmetros de entrada certo?

cstmt = conn.prepareCall("{ CALL PR_EMP_INS_OBS(?,?,?,?) }"); 

Como é que você registra 3 parâmetros de saída com índices diferentes??

cstmt.registerOutParameter(5,OracleTypes.VARCHAR);
cstmt.registerOutParameter(6,OracleTypes.VARCHAR); 
cstmt.registerOutParameter(7,OracleTypes.VARCHAR);

Esqueci de colocar um exemplo com IN/OUT…

Caso os parâmetros sejam IN/OUT então você deve registrar os mesmo parâmetros de entrada como sendo de saída e com o mesmo índice.

Se os parâmetros IN/OUT são os 2, 3 e 4 você deve registrar como OutParameter os índices 2, 3 e 4.

desculpe julianostr,

mas estou tentado aprender mas pelo que vi no meu projeto tá todo bixado eu não sei muita coisa mas estou corrend atras,

obrigado pela sua boa vontade

Que erro é este?

SEVERE: Error starting endpoint
java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14SocketFactory.java:125)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:88)
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:292)
at org.apache.tomcat.util.net.PoolTcpEndpoint.startEndpoint(PoolTcpEndpoint.java:312)
at org.apache.coyote.http11.Http11Protocol.start(Http11Protocol.java:182)
at org.apache.catalina.connector.Connector.start(Connector.java:1001)
at org.apache.catalina.core.StandardService.start(StandardService.java:459)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
04/05/2006 13:55:09 org.apache.catalina.startup.Catalina start
SEVERE: Catalina.start:
LifecycleException: Protocol handler start failed: java.io.IOException: Cannot recover key
at org.apache.catalina.connector.Connector.start(Connector.java:1003)
at org.apache.catalina.core.StandardService.start(StandardService.java:459)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
04/05/2006 13:55:09 org.apache.catalina.startup.Catalina start
INFO: Server startup in 6719 ms