acceso a bd con java

Post on 05-Jul-2015

68 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1Bases de Datos en Java

Bases de datos 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++

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

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

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

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

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

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

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

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>

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

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

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

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)

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

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)

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

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

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+"'");

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

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

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

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

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

top related