ORACLE y JAVA

Roy
07 de Diciembre del 2004
Hola,
Alguien sabe cómo ejecutar funciones y procedimientos almacenados de ORACLE
desde JAVA utilizando JDBC.
Gracias
Roy.

Pochola
07 de Diciembre del 2004
Busca en la clase CallableStatement, hay un metodo prepareCall.

Andres Aguirre
07 de Diciembre del 2004
Esta es una clase que ejecuta procedimientos almacenados de Oracle desde Java.
Espero te sirva de algo...


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.sql.*;
import co.com.winet.util.connpool.*;
import co.com.winet.util.*;


public class Executeactualizacion extends HttpServlet {

private void fillParameters( CallableStatement cs, Vector parametros, Hashtable outParameters ) throws Exception {
fillParameters( cs, parametros );
if( outParameters!=null ){
Enumeration keys = outParameters.keys();
while( keys.hasMoreElements() ){
String key = (String) keys.nextElement();
cs.registerOutParameter(Integer.parseInt( key ), Integer.parseInt( ( String ) outParameters.get( key ) ) );
}
}
}


private void fillParameters( PreparedStatement ps, Vector parametros ) throws Exception {
int i;
if( parametros!=null ) {
for( i=0; i<parametros.size(); i++ ){
Object obj = parametros.get(i);
if( obj==null ) ps.setNull(i+1, Types.VARCHAR);
else {
String className = obj.getClass().getName();
if( className.equals("java.lang.String") ) ps.setString(i+1, (String)obj);
if( className.equals("java.lang.Integer") ) ps.setInt(i+1, ((Integer)obj).intValue());
if( className.equals("java.lang.Long") ) ps.setLong(i+1, ((Long)obj).longValue());
if( className.equals("java.lang.Double") ) ps.setDouble(i+1, ((Double)obj).doubleValue());
if( className.equals("java.lang.Float") ) ps.setFloat(i+1, ((Float)obj).floatValue());
if( className.equals("java.sql.Date") ) ps.setDate(i+1, (java.sql.Date)obj);
if( className.equals("java.util.Date") ) ps.setDate(i+1, new java.sql.Date( ((java.util.Date)obj).getTime() ));
if( className.equals("java.math.BigDecimal") ) ps.setBigDecimal( i+1, (java.math.BigDecimal)obj );
if( className.equals("java.lang.Boolean") ) ps.setBoolean(i+1, ((Boolean)obj).booleanValue());
if( className.equals("java.lang.Byte") ) ps.setByte(i+1, ((Byte)obj).byteValue());
}
}
}
System.out.println("finalizo la funcion fillParameters");
}

public Hashtable ejecutarSPFromString( Connection c, String instruccion, Vector parametros, Hashtable outParameters ) throws Exception {
CallableStatement cs = null;
//ResultSet rs = null;
System.out.println("iniciando la funcion ejecutarSPFromString");
Hashtable resultado = new Hashtable();
try {
cs = c.prepareCall( instruccion );
fillParameters( cs, parametros, outParameters );
int res = cs.executeUpdate();
System.out.println("resultado "+res);
/* Enumeration keys = outParameters.keys();
while( keys.hasMoreElements() ){
String key = (String) keys.nextElement();
int tipo = Integer.parseInt( (String) outParameters.get( key ) );
String valor = cs.getString( Integer.parseInt( key ) );
if( valor==null ) valor = "";
if( valor!=null ) resultado.put( key, valor );
} */
return resultado;
} catch ( Exception e ) {
throw e;
/*} finally {
try { if( rs!=null ) rs.close(); } catch( Exception e ){}
try { if( cs!=null ) cs.close(); } catch( Exception e ){}
*/}

}


public void ejecutar() throws Exception {
Connection c = null;
try {
Hashtable outParameters = new Hashtable();
Hashtable resultado = null;
c = PoolManager.getPool("IPSA").getConexion();
Vector parametros = new Vector();

resultado = ejecutarSPFromString( c, "{dbms_refresh.refresh(ipsa.ips_beneficiarios)}", parametros, outParameters );
resultado = ejecutarSPFromString( c, "{dbms_refresh.refresh(ipsa.ips_afiliacion)}", parametros, outParameters );
resultado = ejecutarSPFromString( c, "{execute genograma}", parametros, outParameters);

} catch (Exception e) {
throw e;
} finally {
try{
PoolManager.getPool("IPSA").liberarConexion(c);
}catch(Exception e){}
}
}


public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

PrintWriter out=response.getWriter();

boolean todoOk = true;
Connection c = null;
PreparedStatement ps = null;

try{
ejecutar();
}
catch(Exception e){
e.printStackTrace(out);
todoOk = false;
}

if (todoOk){
out.println("<html><head></head><body> La actualización se realizo con exito en la base de datos </body></html>");
}else{
out.println("<html><head></head><body> Problemas al refrescar los procedimientos almacenados en la base de datos</body></html>");
}

//desde aca


}
}