1 / 31

Oracle y Java *

Oracle y Java *. * Tomado del curso de Francisco Moreno. Formas de comunicación entre Java y Oracle 1. Java “dentro” de Oracle: Oracle posee su propio compilador y generador de clases Java Java desde afuera de Oracle: Hay 2 Formas:

tarannum
Download Presentation

Oracle y Java *

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle y Java * * Tomado del curso de Francisco Moreno Seminario de Bases de Datos

  2. Seminario de Bases de Datos Formas de comunicación entre Java y Oracle1 Java “dentro” de Oracle: Oracle posee su propio compilador y generador de clases Java Java desde afuera de Oracle: Hay 2 Formas: 1. En forma aislada "Stand Alone", es decir, un programa Java que accesa la base de datos e imprime los resultados por "consola"

  3. Seminario de Bases de Datos 2.Por medio de JSP: Se accesa a la base de datos desde Java y los resultados pueden visualizarse por medio de un navegador. Se requiere para este caso un servidor web (Tomcat, Jrun etc.)‏ Se comenzará con Java dentro de Oracle Formas de comunicación entre Java y Oracle2

  4. Seminario de Bases de Datos Java dentro de Oracle1 Ejecutar en SQL*Plus el siguiente código: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "prueba" AS public class prueba { public static String Hello(String cadena) { return "Bienvenido a Java con Oracle " + cadena; } }; /

  5. Seminario de Bases de Datos Adicionalmente se debe crear una función wrapper (de envoltura) que lo que hace es asociar una función de Oracle con un método de la clase Java: Ejecutar en SQL*Plus: CREATE OR REPLACE FUNCTION saludo(nom VARCHAR2)‏ RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'prueba.Hello (java.lang.String) return java.lang.String'; / Java dentro de Oracle2 Función wrapper

  6. Seminario de Bases de Datos Para invocarla se hace lo siguiente: DROP TABLE estudiante; CREATE TABLE estudiante( cedula NUMBER(8) PRIMARY KEY, nombre VARCHAR2(15)‏ ); INSERT INTO estudiante VALUES (7173, 'Pedro'); INSERT INTO estudiante VALUES (7178, 'Luis'); INSERT INTO estudiante VALUES (4311, 'María'); Java dentro de Oracle3

  7. Seminario de Bases de Datos Java dentro de Oracle4 Ejecutar: SELECT cedula, saludo(nombre)‏ FROM estudiante; Si se dispone de archivos .class ya generados pero no se posee el fuente*, dichas clases se pueden cargar usando el comando loadjava desde la línea de comando (DOS, UNIX etc.) así: * Aunque existen programas que permiten obtener el código fuente desde un .class como Decafe Pro

  8. Seminario de Bases de Datos Java dentro de Oracle5 Abrir cualquier editor de Java (JCreator, Java Editor, Kawa etc.) compilar el siguiente código para generar el .class (Recordar que el nombre del archivo fuente debe ser prueba2.java )‏ public class prueba2 { public static String Hello(String cadena) { return "Otra bienvenida a Java con Oracle " + cadena; } };

  9. Seminario de Bases de Datos Java dentro de Oracle6 Si la compilación es exitosa, se debe generar el archivo prueba2.class ,cargarlo a Oracle desde DOS usando el comando: loadjava -user username/password@bd prueba2.class Nota: Antes de ejecutar el comando situarse en el directorio donde está el archivo prueba2.class o darle el camino completo… Nombre de la BD

  10. Seminario de Bases de Datos Java dentro de Oracle7 Ahora en Oracle:(SQL*Plus)‏ CREATE OR REPLACE FUNCTION saludo2(nom VARCHAR2)‏ RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'prueba2.Hello (java.lang.String) return java.lang.String'; / SELECT cedula, saludo(nombre), saludo2(nombre)‏ FROM estudiante;

  11. Seminario de Bases de Datos Java dentro de Oracle8 Ahora veamos un ejemplo más complejo: Vamos a ejecutar en SQL*Plus el siguiente código: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Paymaster" AS import java.sql.*; import java.io.*; import oracle.sql.*; import oracle.jdbc.driver.*; import java.math.*; Continúa

  12. Seminario de Bases de Datos Java dentro de Oracle9 public class Paymaster { public static BigDecimal wages(STRUCT e)‏ throws java.sql.SQLException { Object[] attribs = e.getAttributes(); BigDecimal sal = (BigDecimal)(attribs[2]); // [2] = salario BigDecimal comm = (BigDecimal)(attribs[3]);//[3] = comision BigDecimal pay = sal; if (comm != null) pay = pay.add(comm); return pay; } } / Fin del código

  13. Seminario de Bases de Datos Java dentro de Oracle10 Crear adicionalmente por medio de SQL*Plus: CREATE OR REPLACE TYPE emple_type AS OBJECT( codigo NUMBER(4), nom VARCHAR2(10), salario NUMBER(6), comision NUMBER(6)‏ ); / DROP TABLE empleado; CREATE TABLE empleado OF emple_type ( codigo PRIMARY KEY, salario NOT NULL ); [0] Desde el punto de vista de Java este es el orden de los atributos en Object [1] [2] [3]

  14. Seminario de Bases de Datos Java dentro de Oracle11 INSERT INTO empleado VALUES(10, 'Luis',100, 50); INSERT INTO empleado VALUES(22, 'Lisa', 200, null); INSERT INTO empleado VALUES(33, 'Casandra', 300, 10); Se crea la función de mapeo (wrapper): CREATE OR REPLACE FUNCTION sal_tot(e emple_type)‏ RETURN NUMBER AS LANGUAGE JAVA NAME 'Paymaster.wages (oracle.sql.STRUCT) return BigDecimal'; /

  15. Seminario de Bases de Datos Java dentro de Oracle12 Ahora: SELECT 'El salario total del empleado con cédula '|| TO_CHAR(codigo) || ' es: '|| sal_tot(VALUE(e))‏ FROM empleado e; ¡Se le está pasando a Java el objeto de Oracle completo!

  16. Seminario de Bases de Datos Java dentro de Oracle13 Un método de un tipo puede "prácticamente" ser implementado en Java: Crear el siguiente Código Java en SQL*Plus: CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "num" AS import java.math.*; import java.math.BigDecimal; public class num { public static BigDecimal square(BigDecimal n)‏ { return n.multiply(n); } } /

  17. Seminario de Bases de Datos Java dentro de Oracle14 CREATE OR REPLACE FUNCTION cuadradojava(n IN NUMBER)‏ RETURN NUMBER AS LANGUAGE JAVA NAME 'num.square(java.math.BigDecimal) return java.math.BigDecimal'; / Creación del tipo: DROP TYPE numero_tip FORCE; CREATE TYPE numero_tip AS OBJECT ( numero NUMBER(6), MEMBER FUNCTION cuadrado(n IN number) RETURN NUMBER ); / Función de mapeo (Wrapper):

  18. Seminario de Bases de Datos Java dentro de Oracle15 Creación del cuerpo del tipo: CREATE OR REPLACE TYPE BODY numero_tip AS MEMBER FUNCTION cuadrado(n IN number) RETURN NUMBER IS BEGIN RETURN cuadradojava(numero); END cuadrado; END; / Creación de tabla e invocación del método: CREATE TABLE numeros OF numero_tip; INSERT INTO numeros VALUES(3); INSERT INTO numeros VALUES(9); SELECT numero, l.cuadrado(numero)‏ FROM numeros l; Se invoca a la función Wrapper

  19. Seminario de Bases de Datos Java desde afuera de Oracle1 Desde un programa Java independiente. Mediante el uso de JDBC: Conjunto de clases Java que permiten la interacción con la base de datos. Procedimiento: - Crear el siguiente código en un editor de Java y compilarlo (por ejemplo en el JCreator)‏ - El archivo nombrarlo conexion.java JDBC= Java DataBase Connection

  20. Seminario de Bases de Datos Java desde afuera de Oracle2 import java.sql.*; import java.math.*; class conexion { static public void main( String[] args ) { Connection conn; Statement sentencia; ResultSet resultado; System.out.println( "Conexión a la base de datos..." ); Continúa

  21. Seminario de Bases de Datos Java desde afuera de Oracle3 try{ // Se carga el driver JDBC-ODBC Class.forName ("oracle.jdbc.driver.OracleDriver"); } catch( Exception e ) { System.out.println( "No se pudo cargar el driver JDBC"); return; } try{ // Se establece la conexión con la base de datos conn = DriverManager.getConnection ("jdbc:oracle:thin:@200.24.8.35:1521:xue", "usuario", "password"); sentencia = conn.createStatement(); } catch( SQLException e ) { System.out.println( "No hay conexión con la base de datos." ); return; } Continúa

  22. Seminario de Bases de Datos Java desde afuera de Oracle4 try { System.out.println( "Seleccionando..." ); resultado = sentencia.executeQuery ("SELECT codigo,nom,salario FROM empleado"); //Se recorren las tuplas retornadas while (resultado.next())‏ { System.out.println(resultado.getInt("codigo")+ "---" + resultado.getString("nom")+ "---" + resultado.getInt("salario")); } Continúa

  23. Seminario de Bases de Datos Java desde afuera de Oracle5 conn.close(); //Cierre de la conexión } catch( SQLException e ){ System.out.println("Error: " + e.getMessage()); } System.out.println("Consulta finalizada."); } //Fin del main } //Fin de la clase Fin del código

  24. Seminario de Bases de Datos Java desde afuera de Oracle6 Compilar… (Con el JCreator use por ejemplo el menú Build y la opcion Compile File)‏ Para ejecutar utilice la opcion Execute File del mismo menú El resultado en pantalla debe ser: Conexión a la base de datos... SELECCIONANDO... 10---Luis---100 22---Lisa---200 33---Casandra---300 Consulta finalizada.

  25. Seminario de Bases de Datos Java desde afuera de Oracle7 Para que el programa Java accese a la base de datos, se debe adicionar a Java una librería especial ("driver" para Oracle)‏ Se puede bajar del sitio de Oracle: http://otn.oracle.com , también está en la página del curso El driver debe ser ubicado en el directorio c:\java\jre\lib\ext En general allí se colocan las librerías adicionales que se deseen incorporar a Java. javaes el nombre del directorio donde está instalado java

  26. Seminario de Bases de Datos Java desde afuera de Oracle8 Otra opción es: Colocar el driver en el mismo directorio donde está el archivo conexión.class Ahora desde DOS situarse en dicho directorio y ejecutar: java -classpath classes129i.zip; conexion Driver

  27. Seminario de Bases de Datos Java desde afuera de Oracle9 CHAR VARCHAR VARCHAR2 NUMBER DATE VARRAY o tabla anidada Tipo de dato del usuario String String String java.Math.BigDecimal java.sql.TimeStamp ARRAY STRUCT Cómo se mapean algunos tipos de datos de Oracle a Java:

  28. Seminario de Bases de Datos Java desde afuera de Oracle10 Desde Java es posible: Crear Destruir Actualizar Borrar Ejecutar etc. Veamos el siguiente ejemplo donde se crea un VARRAY de números: Tablas, tipos, vistas etc. Objetos en la base de datos

  29. Seminario de Bases de Datos Java desde afuera de Oracle11 import java.sql.*; import java.math.*; class crea_varray { static public void main(String[] args ) { Connection conn; Statement stmt; ResultSet resultado; System.out.println( "Conexión a la base de datos..." ); // Se carga el driver JDBC-ODBC try { Class.forName("oracle.jdbc.driver.OracleDriver"); }

  30. Seminario de Bases de Datos Java desde afuera de Oracle12 catch(Exception e ) { System.out.println("No se pudo cargar el driver JDBC" ); return; } try { // Se establece la conexión con la base de datos conn = DriverManager.getConnection ("jdbc:oracle:thin:@200.24.8.35:1521:xue", "usuario", "password"); stmt = conn.createStatement(); } catch( SQLException e ) { System.out.println("No hay conexión con la base de datos."); return; }

  31. Seminario de Bases de Datos Java desde afuera de Oracle13 try { System.out.println( "Creando objetos en la BD..." ); stmt.execute("CREATE TYPE num_varray AS VARRAY(10) OF NUMBER(4,2)"); stmt.execute("CREATE TABLE varray_table(cod varchar2(8), notas num_varray)"); stmt.execute("INSERT INTO varray_table VALUES(100, num_varray(3,4))"); stmt.execute("INSERT INTO varray_table VALUES(200, num_varray(2,5,3))"); conn.close(); } catch( SQLException e ) { System.out.println("Error " + e.getMessage()); return; } System.out.println( "Creación de objetos finalizada." ); } }

More Related