Como Conectar a ORACLE Con Java

8
Como conectar a ORACLE con Java ¿Que es JDBC y para que se utiliza? JDBC es la interfaz que proporciona Java para la conexión a bases de datos. Son un conjunto de clases e interfaces que permiten a Java ejecutar consultas y ordenes en una bases de datos. Para poder conectar a Java con ORACLE lo primero que necesitamos es la implementación de JDBC para ORACLE. Esta implementación se encuentra en el archivo Classes12.jar que podemos encontrar en el siguiente directorio del servidor de Oracle. %ORACLE_HOME%\jdbc\lib ORACLE_HOME es una variable de entorno que se crea durante la instalación del servidor ORACLE, y que indica donde está instalado fisicamente ORACLE dentro del sistema de archivos, normalmente C:\oracle\ora92 para servidores Windows y ORACLE 9i. Esta .misma nomenclatura se aplica al hablar de la instalación cliente Debemos configurar correctamente nuestra variable CLASSPATH para incluir en ella el archivo Classes12.jar. Oracle proporciona los siguientes drivers en su implementacion JDBC: JDBC Thin Driver: No requiere de la instalación cliente de ORACLE. Ideal para Applets. JDBC OCI :API nativa de ORACLE, para aplicaciones J2EE. JDBC KPRB driver: (default connection) para Java Stored Procedures y Database JSP's. Todos los drivers soportan la misma sintaxis y funcionalidad, por lo que nuestro código variará únicamente en la forma de crear la conexion. Conectar a ORACLE con JDBC Thin Driver El driver JDBC Thin se conecta y comunica con ORACLE a nivel de sockets. Proporciona su propia versión del protocolo Net8 (SQL*Net) sobre TCP/IP, por lo que no es necesario que exista una instalación de la parte cliente de ORACLE. Dado que este driver es código 100% Java es completamente independiente de la plataforma de ejecución, y como implementa su propia versión del protocolo es ideal para aplicaciones que se ejecutan sobre un navegador Web (applets) import java.sql.*; class dbAccess { public static void main (String args []) throws SQLException { DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@WIN01:1521:oracleBD", "user", "passw"); // driver@machineName:port:SID , userid, password Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");

Transcript of Como Conectar a ORACLE Con Java

Page 1: Como Conectar a ORACLE Con Java

Como conectar a ORACLE con Java

¿Que es JDBC y para que se utiliza?

JDBC es la interfaz que proporciona Java para la conexión a bases de datos. Son un conjunto de

clases e interfaces que permiten a Java ejecutar consultas y ordenes en una bases de datos.

Para poder conectar a Java con ORACLE lo primero que necesitamos es la implementación de JDBC

para ORACLE. Esta implementación se encuentra en el archivo Classes12.jar que podemos encontrar en el siguiente directorio del servidor de Oracle.

%ORACLE_HOME%\jdbc\lib

ORACLE_HOME es una variable de entorno que se crea durante la instalación del servidor ORACLE, y que indica donde está instalado fisicamente ORACLE dentro del sistema de archivos,

normalmente C:\oracle\ora92 para servidores Windows y ORACLE 9i. Esta .misma nomenclatura se aplica al hablar de la instalación cliente

Debemos configurar correctamente nuestra variable CLASSPATH para incluir en ella el archivo Classes12.jar.

Oracle proporciona los siguientes drivers en su implementacion JDBC:

JDBC Thin Driver: No requiere de la instalación cliente de ORACLE. Ideal para Applets.

JDBC OCI :API nativa de ORACLE, para aplicaciones J2EE.

JDBC KPRB driver: (default connection) para Java Stored Procedures y Database JSP's.

Todos los drivers soportan la misma sintaxis y funcionalidad, por lo que nuestro código variará

únicamente en la forma de crear la conexion.

Conectar a ORACLE con JDBC Thin Driver

El driver JDBC Thin se conecta y comunica con ORACLE a nivel de sockets. Proporciona su propia versión del protocolo Net8 (SQL*Net) sobre TCP/IP, por lo que no es necesario que exista una

instalación de la parte cliente de ORACLE. Dado que este driver es código 100% Java es completamente independiente de la plataforma de ejecución, y como implementa su propia versión

del protocolo es ideal para aplicaciones que se ejecutan sobre un navegador Web (applets)

import java.sql.*;

class dbAccess {

public static void main (String args []) throws SQLException

{

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

Connection conn = DriverManager.getConnection

("jdbc:oracle:thin:@WIN01:1521:oracleBD", "user", "passw");

// driver@machineName:port:SID , userid, password

Statement stmt = conn.createStatement();

ResultSet rset =

stmt.executeQuery("select BANNER from SYS.V_$VERSION");

Page 2: Como Conectar a ORACLE Con Java

while (rset.next())

System.out.println (rset.getString(1)); // Print col 1

stmt.close();

}

}

Conectar a ORACLE con JDBC OCI Driver

El driver JDBC OCI usa el API ORACLE OCI (Oracle Call Interface) para interactuar con ORACLE, por lo que es necesaria la instalación y configuración de la parte cliente de ORACLE. El driver OCI

trabaja con SQL*Net o Net8, por lo que tamdebemos haber creado un alias en el archivo TNS names

(%ORACLE_HOME%\network\ADMIN):

ORACLEBD =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = WIN01)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ORACLEBD)

)

)

El driver JDBC OCI permite realizar llamadas a ORACLE OCI directamente desde Java

proporcionando

un alto grado de compatibilidad con una versión específica de ORACLE utilizando métodos nativos, pero específicos de la plataforma.

import java.sql.*;

class dbAccess

{

public static void main (String args []) throws SQLException

{

try

{

Class.forName ("oracle.jdbc.driver.OracleDriver");

}

catch (ClassNotFoundException e)

{

e.printStackTrace();

}

Connection conn = DriverManager.getConnection

("jdbc:oracle:oci:@ORACLEBD", "user", "passw");

// @TNSNames_Entry, userid, password

Page 3: Como Conectar a ORACLE Con Java

Statement stmt = conn.createStatement();

ResultSet rset =

stmt.executeQuery("select BANNER from SYS.V_$VERSION");

while (rset.next())

System.out.println (rset.getString(1)); // Print col 1

stmt.close();

}

}

Conectar a ORACLE con JDBC KPRB Driver

Por último el driver ORACLE JDBC KPRB es utilizado para escribir en Java procedimientos

almacenados, funciones, triggers ... Ofrece acceso a la conexion activa por lo que no es necesario

crear ninguna conexión adicional.

El driver JDBC KPRB de ORACLE permite obtener un handle de la conexion actual del contexto a través del método OracleDriver.defaultConenction(). Como hemos dicho, se utiliza para

procedimientos almacenados, triggers .... Para ejecutar un procedimiento almacenado debemos

estar conectados a ORACLE a través de una herramienta cliente como SQL*Plus., lo que hacemos con defaultConenction() es acceder a está conexion.

CREATE OR REPLACE AND COMPILE

JAVA SOURCE NAMED BANNER AS

import java.sql.*;

class dbAccess

{

public static String showBanner() throws SQLException

{

String banner="";

Connection conn =

(new oracle.jdbc.driver.OracleDriver()).defaultConnection();

Statement stmt = conn.createStatement();

ResultSet rset =

stmt.executeQuery("select BANNER from SYS.V_$VERSION");

while (rset.next())

banner += rset.getString(1);

//stmt.close(); NO CERRAR LA CONEXION

return banner;

}

}

Es necesario crear un "wrapper" para poder ejecutar el programa desde PL/SQL o SQL.

CREATE OR REPLACE FUNCTION ShowBanner RETURN VARCHAR2

IS

LANGUAGE JAVA NAME 'dbAccess.showBanner() return java.lang.String';

Page 4: Como Conectar a ORACLE Con Java

Una vez hecho esto, podemos ejecutar la función como si se tratase de una función PL/SQL.

SELECT ShowBanner FROM DUAL;

Usuarios y privilegios en Oracle

Compartir este post:

1. Crear Usuarios y asignar privilegios en Oracle

El siguiente es un resumen de algunas consideraciones al momento de crear un usuario o

cuenta en Oracle, y los privilegios y roles que le podemos asignar.

El nombre de usuario no debe superar 30 caracteres, no debe tener caracteres

especiales y debe iniciar con una letra.

Un método de autentificación. El mas común es una clave o password, pero Oracle

10g soporta otros métodos (como biometric, certificado y autentificación por medio

de token).

Un Tablespace default, el cual es donde el usuario va a poder crear sus objetos por

defecto, sin embargo, esto no significa que pueda crear objetos, o que tenga una

cuota de espacio. Estos permisos se asignan de forma separada, salvo si utiliza el

privilegio RESOURCE el que asigna una quota unlimited, incluso en el Tablespace

SYSTEM! Sin embargo si esto ocurre, ud. puede posteriormente mover los objetos

creados en el SYSTEM a otro Tablespace.

Un Tablespace temporal, donde el usuario crea sus objetos temporales y hace los

sort u ordenamientos.

Page 5: Como Conectar a ORACLE Con Java

Un perfil o profile de usuario, que son las restricciones que puede tener su cuenta

(opcional).

Por ejemplo, conectado como el usuario SYS, creamos un usuario y su clave asi:

SQL> CREATE USER ahernandez IDENTIFIED BY ahz

DEFAULT TABLESPACE users;

Si no se indica un Tablespace por defecto, el usuario toma el que está definido en la BD

(generalmente el SYSTEM). Para modificar el Tablespace default de un usuario se hace de

la siguiente manera:

SQL> ALTER USER jperez DEFAULT TABLESPACE datos;

También podemos asignar a los usuarios un Tablespace temporal donde se almacenan

operaciones de ordenamiento. Estas incluyen las cláusulas ORDER BY, GROUP BY,

SELECT DISTINCT, MERGE JOIN, o CREATE INDEX (también es utilizado cuando se

crean Tablas temporales).

SQL> CREATE USER jperez IDENTIFIED BY jpz

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp;

Adicionalmente, a cada usuario se puede asignar a un profile o perfil, que tiene dos

propósitos principalmente:

Limita el uso de recursos, lo que es recomendable, por ejemplo en ambientes de

Desarrollo

Garantiza y refuerza reglas de Seguridad a nivel de cuentas

Ejemplos, cuando se crea el usuario o asignar un perfil existente:

SQL> CREATE USER jperez IDENTIFIED BY jpz

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp

PROFILE resource_profile;

SQL> ALTER USER jperez

PROFILE perfil_desa;

2. Eliminar un Usuario de la Base de Datos

Para eliminar un usuario de la BD se hace uso de la clausula DROP USER y opcionalmente

se puede utilizar CASCADE, para decirle que también elimine todos los objetos creados

por ese usuario.

Page 6: Como Conectar a ORACLE Con Java

SQL> DROP USER jperez CASCADE;

3. Modificar cuentas de Usuarios

Para modificar un usuario creado, por ejemplo cambiar su clave, tenemos la sintáxis:

SQL> ALTER USER NOMBRE_USUARIO

IDENTIFIED BY CLAVE_ACCESO

[DEFAULT TABLESPACE ESPACIO_TABLA]

[TEMPORARY TABLESPACE ESPACIO_TABLA]

[QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA

[PROFILE PERFIL];

4. Privilegios de Sistema y de Objetos

En Oracle existen dos tipos de privilegios de usuario.

4.1 System: Que permite al usuario hacer ciertas tareas sobre la BD, como por ejemplo

crear un Tablespace. Estos permisos son otorgados por el administrador o por alguien que

haya recibido el permiso para administrar ese tipo de privilegio. Existen como 100 tipos

distintos de privilegios de este tipo.

En general los permisos de sistema, permiten ejecutar comandos del tipo DDL (Data

definition Language), como CREATE, ALTER y DROP o del tipo DML (Data

Manipulation Language). Oracle 10g tiene mas de 170 privilegios de sistema los cuales

pueden ser vistos consultando la vista: SYSTEM_PRIVILEGE_MAP

Entre todos los privilegios de sistema que existen, hay dos que son los importantes:

SYSDBA y SYSOPER. Estos son dados a otros usuarios que serán administradores de base

de datos.

Para otorgar varios permisos a la vez, se hace de la siguiente manera:

SQL> GRANT CREATE USER, ALTER USER, DROP USER TO ahernandez;

4.2 Object: Este tipo de permiso le permite al usuario realizar ciertas acciones en objetos

de la BD, como una Tabla, Vista, un Procedure o Función, etc. Si a un usuario no se le dan

estos permisos sólo puede acceder a sus propios objetos (véase USER_OBJECTS). Este

tipo de permisos los da el owner o dueño del objeto, el administrador o alguien que haya

recibido este permiso explícitamente (con Grant Option).

Por ejemplo, para otorgar permisos a una tabla Ventas para un usuario particular:

SQL> GRANT SELECT,INSERT,UPDATE, ON analista.venta TO jperez;

Page 7: Como Conectar a ORACLE Con Java

Adicionalmente, podemos restringir los DML a una columna de la tabla mencionada. Si

quisieramos que este usuario pueda dar permisos sobre la tabla Factura a otros usuarios,

utilizamos la cláusula WITH GRANT OPTION. Ejemplo:

SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON venta TO mgarcia WITH

GRANT OPTION;

5. Asignar cuotas a Usuarios

Por defecto ningun usuario tiene cuota en los Tablespaces y se tienen tres opciones para

poder proveer a un usuario de una quota:

5.1Sin limite, que permite al usuario usar todo el espacio disponible de un Tablespace.

5.2 Por medio de un valor, que puede ser en kilobytes o megabytes que el usuario puede

usar. Este valor puede ser mayor o nenor que el tamaño del Tablespace asignado a él.

5.3 Por medio del privilegio UNLIMITED TABLESPACE, se tiene prioridad sobre

cualquier cuota dada en un Tablespace por lo que tienen disponibilidad de todo el espacio

incluyendo en SYSTEM y SYSAUX.

No se recomienda dar cuotas a los usuarios en los Tablespaces SYSTEM y SYSAUX, pues

tipicamente sólo los usuarios SYS y SYSTEM pueden crear objetos en éstos. Tampoco dar

cuotas en los Tablespaces Temporal o del tipo Undo.

6. Roles

Finalmente los Roles, que son simplemente un conjunto de privilegios que se pueden

otorgar a un usuario o a otro Rol. De esa forma se simplifica el trabajo del DBA en esta

tarea.

Por default cuando creamos un usuario desde el Enterprise Manager se le asigna el permiso

de connect, lo que permite al usuario conectarse a la BD y crear sus propios objetos en su

propio esquema. De otra manera, debemos asignarlos en forma manual.

Para crear un Rol y asignarlo a un usuario se hace de la siguiente manera:

SQL> CREATE ROLE appl_dba;

Opcionalmente, se puede asignar una clave al Rol:

SQL> SET ROLE appl_dba IDENTIFIED BY app_pwd;

Para asignar este Rol a un usuario:

SQL> GRANT appl_dba TO jperez;

Otro uso común de los roles es asignarles privilegios a nivel de Objetos, por ejemplo en una

Tabla de Facturas en donde sólo queremos que se puedan hacer Querys e Inserts:

Page 8: Como Conectar a ORACLE Con Java

SQL> CREATE ROLE consulta;

SQL> GRANT SELECT,INSERT on analista.factura TO consulta;

Y finalmente asignamos ese rol con este “perfil” a distintos usuarios finales:

SQL> GRANT consulta TO ahernandez;

Nota: Existen algunos roles predefinidos, tales como:

CONNECT, CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE

SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, CREATE

CLUSTER,

ALTER SESSION, RESOURCE, CREATE PROCEDURE, CREATE SEQUENCE,

CREATE TRIGGER, CREATE TYPE, CREATE CLUSTER, CREATE INDEXTYPE,

CREATE OPERATOR SCHEDULER, CREATE ANY JOB, CREATE JOB, EXECUTE

ANY CLASS, EXECUTE ANY PROGRAM,

MANAGE SCHEDULER, etc.

DBA: Tiene la mayoría de los privilegios, no es recomendable asignarlo a usuarios que no

son administradores.

SELECT_CATALOG_ROLE: No tiene privilegios de sistema, pero tiene cerca de 1600

privilegios de objeto.

Para consultar los roles definidos y los privilegios otorgados a través de ellos, utilize las

vistas:

SQL> select * from DBA_ROLES;

SQL> select * from DBA_ROLE_PRIVS order by GRANTEE;

Etiquetas: Alter User, Create Role, Default Tablespace, Drop User, Grant, Identified by,

Profile, Quota, Sysdba, Sysoper, With grant option