pedroescudero.info Sobre programación, tecnología, etc

26jul/080

Averiguar versión del driver JDBC que estamos usando

Todas las plataformas y aplicaciones desarrolladas por Oracle están llenas de particularidades, fallos no corregidos y que nunca se corregirán, inconsistencias a evitar al desarrollar software basado en esos componentes, plataformas o aplicaciones... Debido a esto, desarrollar con tecnologías Oracle es costoso y require personal muy especializado.

Cuando desde tecnologías Java conectes con la base de datos tienes que tener en cuenta dos cosas, la versión de la base de datos y la verión del driver JDBC que usarás para conectar y revisar en la web de Oracle los bugs conocidos en la conexión entre ambos y como evitarlos.

Para averiguar la versión del driver JDBC podemos usar el siguiente código. Este código puede usarse también para averiguar el driver JDBC utilizado en conexiones con otras bases de datos, no solo con Oracle.

// Cargamos el driver JDBC de Oracle

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection

("jdbc:oracle:thin:@< tu host>:<tu puerto>:<SID de tu base de datos>",

"<userid de tu base de datos>", "<password de tu base de datos>");

// Creamos el objeto DatabaseMetaData de Oracle

DatabaseMetaData meta = conn.getMetaData ();

// Obtenemos la información del driver:

System.out.println("JDBC driver version is " + meta.getDriverVersion());

21may/081

Llamando a funciones o procedimientos PL/SQL almacenados en Oracle desde Java

Hoy me surgía la duda de como llamar a procedimientos o funciones PL/SQL desde Java. Explico el proceso a seguir.
Para llamar a procedimientos o funciones almacenadas en Oracle vamos a usar un objeto referenciado mediante la interfaz CallableStatement.

Creamos la conexión como es habitual.

try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
out.print("\nExcepción: " + e.getMessage() + "<p />");
}

try {
Connection conexion = DriverManager.getConnection("jdbc:oracle:thin:@" + "host:puerto:basededatos","usuario","clave");

(...)

Usando el método prepareCall de la clase Connection creamos un objeto que referenciamos usando la interfaz CallableStatement.

CallableStatement sentencia = conexion.prepareCall("{ ? = call FUNCION(?,?)}");

ó

CallableStatement sentencia = conexion.prepareCall("{ call PROCEDIMIENTO(?,?)}");

Registramos los parámetros en el CallableStatemet. Usaremos el método set para los parámetros de entrada y el método registerOutParameter para los parámetros de salida, que luego recuperaremos con el método get<tipo> correspondiente. Por ejemplo para el caso de la función.

sentencia.registerOutParameter(1, OracleTypes.VARCHAR);
sentencia.setInt(2, 1);
sentencia.setInt(3, 1);

Ejecutamos la sentencia.

sentencia.execute();
} catch (SQLException e) {
out.print("\nExcepción: " + e.getMessage() + "<p />");
}

Si tienes alguna duda, sugerencia, etc, deja un comentario.

Etiquetado con: , , , 1 Comentario