acceso a bd con java

24
1 Bases de Datos en Java Bases de datos con Java

Upload: julio-rodriguez

Post on 05-Jul-2015

68 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Acceso a BD Con Java

1Bases de Datos en Java

Bases de datos con Java

Page 2: Acceso a BD Con Java

2Bases de Datos en Java

Conectividad abierta de bases de datos Conectividad abierta de bases de datos

● La conectividad abierta de bases de datos (ODBC, Open Database Connectivity) es una de las interfaces más populares en el mundo de las PC

● ODBC es la implementación de Microsoft de la especificación X/OPEN y SQL Access Group (SAG) Call Level Interface (CLI)

● El diseño de JDBC es basado en ODBC

● Una aplicación ODBC tiene cinco capas lógicas: aplicación, interfaz ODBC, administrador de controladores, controlador y origen de datos. La capa de aplicación proporciona la GUI y la lógica de la aplicación y se escribe en lenguajes como Java, Visual Basic o C++

Page 3: Acceso a BD Con Java

3Bases de Datos en Java

● El controlador es el componente real que tiene el conocimiento acerca de bases de datos específicas

● el origen de los datos puede ser un sistema administrador de base de datos, o simplemente el almacén de datos

Conectividad abierta de bases de datos Conectividad abierta de bases de datos

Page 4: Acceso a BD Con Java

4Bases de Datos en Java

Conectividad de bases de datos en Java Conectividad de bases de datos en Java

Las facilidades que ofrece JDBC son las siguientes:

● Ofrece una interfaz común SQL a las aplicaciones Java que acceden Bases de datos remotas

● Permite desarrollar aplicaciones de bases de datos con las ventajas de Java: seguridad, confiabilidad y portabilidad

● Se basa en X/Open SQL CLI y en Microsoft ODBC

● Soporta como mínimo ANSI SQL 92 Entry Level

● Puede aprovechar toda la funcionalidad de un motor de base de datos

Page 5: Acceso a BD Con Java

5Bases de Datos en Java

Arquitectura de JDBC Arquitectura de JDBC

● JDBC define un conjunto de objetos y métodos API para interactuar con la base de datos subyacente

● Un programa Java primero abre una conexión con una base de datos, hace un objeto de instrucción, pasa instrucciones SQL al DBMS subyacente a través del objeto de instrucción y recupera los resultados así como la información sobre el conjunto de resultados

● Los archivos de la clase JDBC y el applet/aplicación de Java por lo general residen en el cliente y el sistema administrador de base de datos (DBMS) y el origen de datos se ubican por lo regular en un servidor remoto

Page 6: Acceso a BD Con Java

6Bases de Datos en Java

● El Applet/aplicación y las capas JDBC se comunican en el sistema cliente, y el controlador se hace cargo de interactuar con la base de datos a través de la red

● Las clases JDBC están en el paquete java.sql para leer y escribir al origen de datos

● los applets sólo pueden conectarse al servidor desde el cual se cargan

● los applets remotos no pueden conectarse a bases de datos locales

● Las aplicaciones no tienen restricciones de conexión

Arquitectura de JDBC Arquitectura de JDBC

Page 7: Acceso a BD Con Java

7Bases de Datos en Java

Implementación de JDBC Implementación de JDBC

Controlador java.sql.Driver  java.sql.DriverManager  java.sql.PropertyInfo   

Conexión java.sql.Connection   

Instrucciones java.sql.Statement  java.sql.PreparedStatement  java.sql.CallableStatementConjunto de resultados java.sql.ResulSetErrores/Advertencias java.sql.Exception  java.sql.SQLWarning   

Metadatos java.sql.DatabaseMetaData  java.sql.ResultSetMetaData   

Fecha/Hora java.sql.Date  java.sql.Time  java.sql.Timestamp   

Varios java.sql.Numeric

TIPO CLASES

  java.sql.Types

Page 8: Acceso a BD Con Java

8Bases de Datos en Java

Anatomía de una aplicación JDBC Anatomía de una aplicación JDBC

● Primero el programa carga el driver mediante Class.forName()

● Segundo llama al método getConnection() para obtener el objeto Connection

● Después crea el objeto Statement y prepara una instrucción SQL

● Una instrucción SQL se puede ejecutar de inmediato (objeto Statement)

● o puede tratarse de una instrucción compilada (objeto PreparedStatement)

● o una llamada a un procedimiento almacenado (objeto CallableStatement)

● Dentro de los métodos que se deben de ejecutar para realizar un acceso a la base de datos tenemos:

● el método executeQuery(),que devuelve un objeto ResulSet

Page 9: Acceso a BD Con Java

9Bases de Datos en Java

● Para las instrucciones de SQL como ubpdate y delete se utiliza el método executeUpdate(), el cual devuelve un entero que indica el número de filas afectadas por la instrucción SQL

● ResulSet contiene filas de datos que se analizan mediante el método next()

● En el caso de una aplicación de proceso de transacciones, se pueden utilizar métodos como rollback() y commit() ya sea para deshacer los cambios realizados por instrucciones SQL, o afectar de manera permanente dichos cambios

Anatomía de una aplicación JDBC Anatomía de una aplicación JDBC

Page 10: Acceso a BD Con Java

10Bases de Datos en Java

Clases componentes del API JDBC Clases componentes del API JDBC

● Se encuentra en el paquete java.sql

● La clase que está en la parte superior de la jerarquía es DriverManager

● Este administrador de controladores mantiene la información del controlador, información del estado y demás

● Cuando se carga cada uno de estos controladores se registra con el Driver Manager

● cuando se le requiere para abrir una conexión el DriverManager selecciona el controlador dependiendo del URL del JDBC

● JDBC identifica una base de datos con un URL. El URL es de la forma:

Jdbc:<subprotocolo>:<nombrerelacionado con el DBMS/protocol>

Page 11: Acceso a BD Con Java

11Bases de Datos en Java

Para bases de datos en Internet/Intranet:

● El nombre relacionado con el DBMS puede contener el URL de red//hostname:port/...

● El <subprotocolo> puede ser cualquier nombre que entienda una base de datos.

● El nombre del subprotocolo ODBC está reservado para orígenes de datos de tipo ODBC.

● Un URL de JDBC de una base de datos ODBC normal sería como el siguiente:

  Jdbc:odbc:<ODBC DSN;User=<nombreusuario>;PW=<contraseña>

Conexión a la base de datosConexión a la base de datos

Page 12: Acceso a BD Con Java

12Bases de Datos en Java

● sirve para cargar los drivers ● provee soporte para conectarse a las bases de datos ● La instrucción para cargar el driver es la siguiente:  Class.forName(driver);● Para inicializar y cargar el controlador JDBC-ODBC:  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");El siguiente sería una porción de código para cargar el controlador:Try {

Class.forName(driver);Conexion = DriverManager.getConnection (bdURL,usuario,clave);

}catch (ClassNotFoundException e){System.out.println(“no se encontro el driver JDBC”+e);}catch (SQLException e){

System.out.println(“error al conectarse ”+a); }

La clase DriverManagerLa clase DriverManager

Page 13: Acceso a BD Con Java

13Bases de Datos en Java

Está dirigida a una base de datos específica con la que se puede interactuar mediante un determinado subprotocolo

● Maneja en forma interna todos los aspectos de una conexión y los detalles son transparentes para el programa

● Para poder realizar la conexión a una determinada base de datos es necesario primero especificar el URL ya que el comando getConnection lo requiere así

● El formato general del URL para poder conectarse a una base de datos es el siguiente:

jdbc:<protocolo>:subnombrebasededatos>

● Si el driver es para ODBC:

  jdbc:odbc:fuente

● Si es otro driver, en general sería:

  jdbc:driver://host:puerto/nombreBD

La clase ConnectionLa clase Connection

Page 14: Acceso a BD Con Java

14Bases de Datos en Java

el puerto es opcional y se usa cuando el motor de la base de

datos está instalado en un puerto que no es el estándar

● Si se usa un servidor de nombres:

jdbc:dcenaming:nombreBd

● Un ejemplo de un URL utilizando el driver JDBC-ODBC es:

String bdURL=”jdbc:odbc:fuentebd”;

● Una vez definido el URL se realiza la conexión la cual es estándar así:

  Connection conexión;

Conexión=DriverManager.getConnection(bdURL,usuario,clave);

Debes de tener en cuenta que usuario y clave son las correspondientes identificaciones y claves que defines en el ODBC cuando lo estás configurando para la base de datos con la cual vas a trabajar, estos parámetros son de tipo String

La clase Connection (Continuación)La clase Connection (Continuación)

Page 15: Acceso a BD Con Java

15Bases de Datos en Java

● Se crea utilizando el método createStatement() del objeto Connection

● Los métodos más importantes son executeQuery(), executeUpdate() y execute()

● Al crear un objeto de este tipo con una instrucción SQL, el método executeQuery() toma una cadena SQL, la transfiere al origen de datos subyacente a través del administrador de controladores y obtiene el ResulSet de vuelta al programa de aplicación

● El método executeQuery() solo devuelve un ResulSet, si desea varios entonces se debe utilizar el método execute()

● Un ejemplo es como sigue, debes de tener en cuenta que primero se debió hacer una conexión a la fuente de datos:

  Statement sentencia;

Sentencia= conexión.createStatement();

● Una vez creado el objeto Statement se realiza el query sobre la BD

La clase StatementLa clase Statement

Page 16: Acceso a BD Con Java

16Bases de Datos en Java

● Se utiliza para efectuar las respectivas operaciones sobre la base de datos activa una vez que se ha establecido la conexión y el respectivo objeto Statement

● El objeto ResulSet es un conjunto de datos tubular

● Consiste de filas de datos organizados en columnas uniformes

● En JDBC el programa Java puede ver sólo una fila de datos a la vez, para que se desee ver el resto de filas es necesario utilizar el método next() y así avanzar a la siguiente fila

● Una vez que el programa tiene una fila, puede usar el índice posicional (1 para la primera columna, 2 para la segunda, etc...), o el nombre de la columna para obtener el valor del campo mediante los métodos getXXXX(“nombrecampo”) donde XXXX corresponde al tipo de dato que está extrayendo y nombrecampo al nombre del campo en la tabla de la base de datos, ejemplo:

Procesamiento de resultados (ResultSet)Procesamiento de resultados (ResultSet)

Page 17: Acceso a BD Con Java

17Bases de Datos en Java

ResultSet resultado = null; query= new String("Select * from identif where ident='" + c1 + "'"); Statement s = conexion.createStatement();

resultado = s.executeQuery(query); if(resultado!=null){ if (resultado.next () ) { nombre.setText(resultado.getString(3)); clave.setText(resultado.getString(2)); resultado.close(); }

else { resultado.close();

} } else resultado.close();

Una vez terminado el query se debe cerrar el objeto ResultSet con close()

Procesamiento de resultados (ResultSet) - Ejemplo

Procesamiento de resultados (ResultSet) - Ejemplo

Page 18: Acceso a BD Con Java

18Bases de Datos en Java

Se realiza de la siguiente manera:

Try{

Conexión.close();

}

catch(SQLException e){

System.out.println(“error en la desconexion de la base de datos”+e);

}

Desconexión de la base de datosDesconexión de la base de datos

Page 19: Acceso a BD Con Java

19Bases de Datos en Java

Operaciones sobre las bases de datos o sobres sus tuplas Operaciones sobre las bases de datos o sobres sus tuplas

Existen operaciones que se pueden realizar sobre los datos (tuplas) de la

base de datos como sobre las bases de datos directamente:

1. Operaciones sobre tuplas de las bases de datos.

● Insertar tuplas

● Statement s=conexión.createStatement();

s.executeUpdate(“Insert Into identify values ('" + cod

"','"+nom+ "','"+clave + "')");

● Actualizar tuplas

● Statement s=conexión.createStatement();

s.executeUpdate(“UPDATE identify SET nombd='“+nombre+"',

clbd='"+clave+"' WHERE codbd='"+cod+"'");

Page 20: Acceso a BD Con Java

20Bases de Datos en Java

● Eliminar tuplas

● Statement s=conexion.createStatement();

s.executeUpdate(“Delete from identify WHERE

codbd='"+cod+"'");

● Consultar tuplas

● Statement s=conexion.createStatement();

s.executeUpdate(“("Select * from identif where

codbd='"+ cod + "'");

Operaciones sobre las bases de datos o sobres sus tuplas Operaciones sobre las bases de datos o sobres sus tuplas

Page 21: Acceso a BD Con Java

21Bases de Datos en Java

● creación / eliminación de una tabla

Statement s=conexión.createStatement();

s.executeUpdate(“CREATE TABLE tabla1”+”(cod

VARCHAR(15), nombre INT, valor REAL)”);

...

s.executeUpdate(“DROP TABLE tabla1”);

Operaciones sobre las bases de datos o sobres sus tuplas Operaciones sobre las bases de datos o sobres sus tuplas

Page 22: Acceso a BD Con Java

22Bases de Datos en Java

● otorgar / eliminar derechos sobre una tabla

Statement s=conexión.createStatement();

s.executeUpdate(“GRANT ALL ON tabla1 TO PUBLIC”);

s.executeUpdate(“REVOKE ALL ON tabla1 FROM PUBLIC”);

Operaciones sobre las bases de datos o sobres sus tuplas Operaciones sobre las bases de datos o sobres sus tuplas

Page 23: Acceso a BD Con Java

23Bases de Datos en Java

Correspondencia entre tipos SQL y tipos Java

Correspondencia entre tipos SQL y tipos Java

Tipo SQL Tipo Java

BIT boolean

DATE java.sql.Date

DOUBLE double

INTEGER/INT int

BIGINT long

BINARY byte[]

CHAR String

DECIMAL Numeric

FLOAT Double

REAL float

SMALLINT short

VARCHAR String

Page 24: Acceso a BD Con Java

24Bases de Datos en Java

Diferencia entre acceder a bases de datos desde una

aplicación vs desde un applet

Diferencia entre acceder a bases de datos desde una

aplicación vs desde un applet

● La única diferencia para acceder es que desde un applet se debe de definir unas políticas de acceso a la base de datos para poder otorgarle permisos de acceso, estas políticas se definen así:

grant {

permission java.security.AllPermission;

};

Las cuales tienes que hacer que se hagan efectivas con el paquete que

maneja la seguridad de Java, sino no te permitirá acceder a las bases de

datos. Sugerencia, guarde este comando en un archivo llamándolo por

ejemplo politicas.obl y luego cree un archivo .bat con el siguiente

comando, sálvelo y luego por intermedio de éste será más fácil correrlo.

appletviewer -J-Djava.security.policy=politicas.obl BDJava.htm

pause