ORACLE y JAVA
Hola,
Alguien sabe cómo ejecutar funciones y procedimientos almacenados de ORACLE
desde JAVA utilizando JDBC.
Gracias
Roy.
Alguien sabe cómo ejecutar funciones y procedimientos almacenados de ORACLE
desde JAVA utilizando JDBC.
Gracias
Roy.
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
}
}
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
}
}