2.1 Tutorial de JDBC

Tamaño: px
Comenzar la demostración a partir de la página:

Download "2.1 Tutorial de JDBC"

Transcripción

1 2.1 Tutorial de JDBC

2 Índice Introducción Accesos básicos Tipos SQL y Java DataSources Pool de conexiones Transacciones Otros temas

3 Introducción JDBC (Java DataBase Connectivity) es un API que permite lanzar queries a una base de datos relacional Su diseño está inspirado en dos conocidas APIs ODBC (Open DataBase Connectivity) X/OPEN SQL CLI (Call Level Interface) El programador siempre trabaja contra los paquetes java.sql y javax.sql Forma parte de J2SE javax.sql formaba parte de J2EE, pero se movió a J2SE (desde la versión 1.4 de J2SE) Contienen un buen número de interfaces y algunas clases concretas, que conforman el API de JDBC Para poder conectarse a la BD y lanzar queries, es preciso tener un driver adecuado para ella Un driver suele ser un fichero.jar que contiene una implementación de todos los interfaces del API de JDBC Nuestro código nunca depende del driver, dado que siempre trabaja contra los paquetes java.sql y javax.sql

4 Driver JDBC Aplicación <<use>> <<use>> java.sql javax.sql BD <<access>> Driver JDBC

5 Tipos de drivers (1) Driver Tipo 1 (ej.: bridge JDBC-ODBC) <<use>> API nativa estándar (ej.: ODBC) <<access>> Driver Tipo 2 (ej: Oracle OCI) <<use>> API nativa BD (normalmente en C/C++) <<access>> <<access>> BD Driver Tipo 3 <<use>> Servidor con API genérica Driver Tipo 4 (ej: Oracle thin) <<access>>

6 Tipos de drivers (y 2) Comentarios Los drivers de tipo 1 y 2 llaman a APIs nativas mediante JNI (Java Native Interface) => requieren que la máquina en la que corre la aplicación tenga instaladas las librerías de las APIs nativas (.DLL,.so) Los drivers de tipo 3 y 4 son drivers 100% Java La ventaja de un driver de tipo 3 es que una aplicación puede usarlo para conectarse a varias BDs Pero esto también se puede conseguir usando un driver distinto (de los otros tipos) para cada BD Eficiencia: en general, los drivers más eficientes son los de tipo 2

7 Independencia de la BD Idealmente, si nuestra aplicación cambia de BD, no necesitamos cambiar el código; simplemente, necesitamos otro driver Sin embargo, desafortunadamente las BDs relacionales usan distintos dialectos de SQL ( a pesar de que en teoría es un estándar!) Tipos de datos: varían mucho según la BD Generación de identificadores: secuencias, autonumerados, etc. Veremos patrones para hacer frente a este problema Usaremos interfaces para el acceso a BD, de manera que se puedan construir adaptadores para distintas BDs, proporcionando implementaciones por defecto con SQL estándar cuando sea posible

8 Ejemplo de actualización: es.udc.fbellas.j2ee.jdbctutorial.insertexample (1) package es.udc.fbellas.j2ee.jdbctutorial; import java.sql.connection; import java.sql.statement; Import java.sql.drivermanager; import java.sql.sqlexception; public final class InsertExample { public static void main (String[] args) { Connection connection = null; Statement statement = null; try { /* Get a connection. */ String driverclassname = "com.mysql.jdbc.driver"; String driverurl = "jdbc:mysql://localhost/j2ee"; String user = "j2ee"; String password = "j2ee"; Class.forName(driverClassName); connection = DriverManager.getConnection(driverUrl, user, password);

9 Ejemplo de actualización: es.udc.fbellas.j2ee.jdbctutorial.insertexample (2) /* Create data for some accounts. */ String[] accountidentifiers = new String[] {"fbellas-1", "fbellas-2", "fbellas-3"; double[] balances = new double[] {100.0, 200.0, 300.0; /* Create "statement". */ statement = connection.createstatement(); /* Insert the accounts in database. */ for (int i=0; i<accountidentifiers.length; i++) { /* Execute query. */ String querystring = "INSERT INTO TutAccount " + "(accid, balance) VALUES ('" + accountidentifiers[i] + "', " + balances[i] + ")"; int insertedrows = statement.executeupdate(querystring); if (insertedrows!= 1) { throw new SQLException(accountIdentifiers[i] + ": problems when inserting!!!!");

10 Ejemplo de actualización: es.udc.fbellas.j2ee.jdbctutorial.insertexample (y 3) catch (SQLException e) { e.printstacktrace(); finally { try { if (statement!= null) { statement.close(); if (connection!= null) { connection.close(); catch (SQLException e) { e.printstacktrace(); // try // main // class

11 Ejemplo de búsqueda: es.udc.fbellas.j2ee.jdbctutorial.selectexample (1) public final class SelectExample { public static void main (String[] args) { Connection connection = null; Statement statement = null; ResultSet resultset = null; try { /* Get a connection. */ <<... >> /* Create "statement". */ statement = connection.createstatement(); /* Execute query. */ String querystring = "SELECT accid, balance FROM " + "TutAccount"; resultset = statement.executequery(querystring);

12 Ejemplo de búsqueda: es.udc.fbellas.j2ee.jdbctutorial.selectexample (2) /* Iterate over matched rows. */ while (resultset.next()) { int i = 1; String accountidentifier = resultset.getstring(i++); double balance = resultset.getdouble(i++); System.out.println("accountIdentifier = " + accountidentifier + " balance = " + balance); catch (SQLException e) { e.printstacktrace();

13 Ejemplo de búsqueda: es.udc.fbellas.j2ee.jdbctutorial.selectexample (y 3) finally { try { if (resultset!= null) { resultset.close(); if (statement!= null) { statement.close(); if (connection!= null) { connection.close(); catch (SQLException e) { e.printstacktrace(); // try // main // class

14 Cargar el driver Comentarios (1) Su inicializador static registra el driver en DriverManager En una aplicación real El nombre de la clase del driver, la URL (depende del driver), el nombre de usuario y la contraseña deberían ser configurables (ej.: leerlos de un fichero de configuración) Existe una alternativa mejor a DriverManager (javax.sql.datasource) ResultSet es un proxy sobre las filas que han concordado en la búsqueda El driver no tiene porque traer de golpe todas las filas a memoria Un buen driver leerá las filas por bloques, leyendo un nuevo bloque cada vez que se intenta leer una fila que no está en memoria (quizás eliminando de memoria el bloque anterior)

15 Comentarios (2) DriverManager +manages 0..n <<Interface>> Driver <<instantiate>> <<Interface>> Connection <<instantiate>> <<Interface>> Statement <<instantiate>> <<Interface>> ResultSet

16 Liberación de recursos Comentarios (y 3) En principio, aunque no se llame a Connection.close, cuando la conexión sea eliminada por el garbage collector, el método finalize de la clase que implementa Connection, invocará al método close Además Cuando se cierra una conexión, cierra todos sus Statements asociados Cuando se cierra un Statement, cierra todos sus ResultSets asociados Sin embargo, En una aplicación multi-thread que solicita muchas conexiones por minuto (ej.: una aplicación Internet), el garbage collector correrá demasiado tarde => es imprescindible cerrar las conexiones tan pronto como se pueda Puede haber bugs en algunos drivers, de manera que no cierren los Statements asociados a una conexión y los ResultSets asociados a un Statement => mejor cerrarlos explícitamente

17 PreparedStatement Cada vez que se envía una query a la BD, ésta construye un plan para ejecutarla La parsea Determina qué se quiere hacer Determina cómo ejecutarla Ejemplo InsertExample Existe un bucle en el que repetidamente se lanza la misma query INSERT con distintos parámetros La BD construye un plan para ejecutar la misma query cada vez! En este tipo de situaciones, es mejor usar PreparedStatement PreparedStatement Es un interfaz que deriva de Statement Permite representar una query parametrizada, para la que la BD construirá un plan

18 es.udc.fbellas.j2ee.jdbctutorial.preparedstatementexample (1) public final class PreparedStatementExample { public static void main (String[] args) { Connection connection = null; PreparedStatement preparedstatement = null; try { /* Get a connection. */ <<... >> /* Create data for some accounts. */ String[] accountidentifiers = new String[] {"fbellas-1", "fbellas-2", "fbellas-3"; double[] balances = new double[] {100.0, 200.0, 300.0;

19 es.udc.fbellas.j2ee.jdbctutorial.preparedstatementexample (2) /* Create "preparedstatement". */ String querystring = "INSERT INTO TutAccount " + "(accid, balance) VALUES (?,?)"; preparedstatement = connection.preparestatement(querystring); /* Insert the accounts in database. */ for (int i=0; i<accountidentifiers.length; i++) { /* Fill "preparedstatement". */ int j = 1; preparedstatement.setstring(j++, accountidentifiers[i]); preparedstatement.setdouble(j++, balances[i]); /* Execute query. */ int insertedrows = preparedstatement.executeupdate(); if (insertedrows!= 1) { throw new SQLException(accountIdentifiers[i] + ": problems when inserting!!!!");

20 es.udc.fbellas.j2ee.jdbctutorial.preparedstatementexample (y 3) catch (SQLException e) { e.printstacktrace(); finally { try { if (preparedstatement!= null) { preparedstatement.close(); if (connection!= null) { connection.close(); catch (SQLException e) { e.printstacktrace(); // try // main // class

21 Statement vs PreparedStatement PreparedStatement es más eficiente en bucles que lanzan la misma query con distintos parámetros Statement obliga a formatear los datos de la query porque ésta se envía a la BD tal cual la escribimos Las cadenas de caracteres tienen que ir entre => código menos legible y más propenso a errores Existen algunos tipos de datos (ej.: fechas) que se especifican de manera distinta según la BD Con PreparedStatement el formateo de los datos lo hace el driver Conclusión En general, usar siempre PreparedStatement

22 Tipos SQL y Java ResultSet y PreparedStatement proporcionan métodos getxxx y setxxx Cuál es la correspondencia entre tipos Java y tipos SQL? Idea básica: un dato de tipo Java se puede almacenar en una columna cuyo tipo SQL sea consistente con el tipo Java Las BDs suelen emplear nombres distintos para los tipos que proporcionan No afecta al código Java (excepto que cree tablas, lo que en general, no debe hacerse)

23 Correspondencia entre tipos Java y SQL estándar Tipo Java boolean byte short int long float double java.math.bigdecimal String byte[] java.sql.date java.sql.time java.sql.timestamp Tipo SQL BIT TINYINT SMALLINT INTEGER BIGINT REAL DOUBLE NUMERIC VARCHAR o LONGVARCHAR VARBINARY o LONGVARBINARY DATE TIME TIMESTAMP

24 DataSources (1) Cargar el driver y obtener conexiones con DriverManager.getConnection requiere Conocer el nombre de la clase del driver La cadena de conexión A no ser que leamos los anteriores parámetros de un fichero de configuración, el registro del driver y la obtención de conexiones no será portable Interfaz javax.sql.datasource Es la alternativa recomendada a DriverManager.getConnection No hay que escribir código para registrar el driver Actúa como factoría de conexiones

25 DataSources (2) Normalmente una aplicación obtiene una referencia a un objeto DataSource mediante JNDI JNDI (Java Naming and Directory Interface) Familia de paquetes javax.naming Formó parte de J2EE (hasta la versión 1.2), pero se movió a J2SE (desde la versión 1.3 de J2SE) Es un API que proporciona un conjunto de interfaces para acceder a un servicio de nombres y directorios Servicio de nombres y directorios Permite gestionar información de manera jerárquica Usuarios (login+password, directorios home, etc.), máquinas de la red (direcciones ethernet e IP, etc.) Puede implementarse como un sólo servidor o una jerarquía de servidores (federación)

26 DataSources (3) Servicio de nombres y directorios Ejemplos LDAP (Lightweight Directory Access Protocol) NIS/NIS+ (Network Information System) Microsoft Active Directory JNDI permite acceder a cualquier servicio de nombres y directorios usando la misma interfaz Se necesita disponer de una implementación de JNDI para el servicio en cuestión Actualmente se pretende que las aplicaciones lean la información de configuración mediante servicios de nombres y directorios, y no mediante ficheros planos locales Ventaja: la información de configuración de las aplicaciones se puede centralizar en la máquina (o máquinas) que corren el servicio de nombres y directorios

27 DataSources (y 4) Ejemplo import javax.naming.context import javax.naming.initialcontext; import javax.sql.datasource; //... Context context = new InitialContext(); DataSource datasource = (DataSource)context.lookup( java:comp/env/jdbc/j2ee-examplesds ); Connection connection = datasource.getconnection(); Quién registra los objetos DataSource en el servicio de nombres y directorios? Podría hacerlo el programador usando JDNI Sin embargo, normalmente dispondremos de una herramienta de administración o un fichero de configuración en el servidor

28 Una implementación sencilla de un DataSource A partir del tema 4 (tecnologías web) usaremos JNDI para localizar objetos DataSource Mientras tanto... <<Interface>> DataSource (from sql) SimpleDataSource + SimpleDataSource() <<use>> ConfigurationParametersManager (from configuration) Sólo implementa "getconnection()". El resto de operaciones lanzan la exception (unchecked) "UnsupportedOperationException"

29 es.udc.fbellas.j2ee.util.sql.simpledatasource (1) public class SimpleDataSource implements DataSource { private static final String DRIVER_CLASS_NAME_PARAMETER = "SimpleDataSource/driverClassName"; private static final String URL_PARAMETER = "SimpleDataSource/url"; private static final String USER_PARAMETER = "SimpleDataSource/user"; private static final String PASSWORD_PARAMETER = "SimpleDataSource/password"; private static String url; private static String user; private static String password;

30 es.udc.fbellas.j2ee.util.sql.simpledatasource (2) static { try { /* Read configuration parameters. */ String driverclassname = ConfigurationParametersManager.getParameter( DRIVER_CLASS_NAME_PARAMETER); url = ConfigurationParametersManager.getParameter( URL_PARAMETER); user= ConfigurationParametersManager.getParameter( USER_PARAMETER); password = ConfigurationParametersManager.getParameter( PASSWORD_PARAMETER); /* Load driver. */ Class.forName(driverClassName); catch (Exception e) { e.printstacktrace(); // static

31 es.udc.fbellas.j2ee.util.sql.simpledatasource (y 3) public Connection getconnection() throws SQLException { return DriverManager.getConnection(url, user, password); << Resto de métodos => throw new UnsupportedOperationException("Not implemented"); >> // class

32 es.udc.fbellas.j2ee.util.configuration.configurationparametersmanager (1) public final class ConfigurationParametersManager { private static final String JNDI_PREFIX = "java:comp/env/"; private static final String CONFIGURATION_FILE = "ConfigurationParameters.properties"; private static boolean usesjndi; private static Map parameters; static { try { /* Read property file (if exists).*/ Class configurationparametersmanagerclass = ConfigurationParametersManager.class; ClassLoader classloader = configurationparametersmanagerclass.getclassloader(); InputStream inputstream = classloader.getresourceasstream(configuration_file); Properties properties = new Properties(); properties.load(inputstream); inputstream.close();

33 es.udc.fbellas.j2ee.util.configuration.configurationparametersmanager (2) /* We have been able to read the file. */ usesjndi = false; System.out.println("*** Using " + "'ConfigurationParameters.properties' file " + "for configuration ***"); /* * We use a "HashMap" instead of a "HashTable" because * HashMap's methods are *not* synchronized (so they are * faster), and the parameters are only read. */ parameters = new HashMap(properties); catch (Exception e) { /* We assume configuration with JNDI. */ usesjndi = true; System.out.println("*** Using JNDI for configuration ***"); /* * We use a synchronized map because it will be filled * by using a lazy strategy. */ parameters = Collections.synchronizedMap(new HashMap()); // static

34 es.udc.fbellas.j2ee.util.configuration.configurationparametersmanager (y 3) private ConfigurationParametersManager() { public static String getparameter(string name) throws MissingConfigurationParameterException { String value = (String) parameters.get(name); if (value == null) { if (usesjndi) { try { InitialContext initialcontext = new InitialContext(); value = (String) initialcontext.lookup( JNDI_PREFIX + name); parameters.put(name, value); catch (Exception e) { throw new MissingConfigurationParameterException( name); else { throw new MissingConfigurationParameterException(name); return value; // class

35 Comentarios ConfigurationParameters.properties tiene que estar en el class path Ejemplo de especificación de parámetros de configuración en ConfigurationParameters.properties # # SimpleDataSource. # SimpleDataSource/driverClassName=com.mysql.jdbc.Driver SimpleDataSource/url=jdbc:mysql://localhost/j2ee SimpleDataSource/user=j2ee SimpleDataSource/password=j2ee

36 Pool de conexiones (1) En una aplicación servidora (ej.: un contenedor de páginas JSP/Servlets, un contenedor de EJBs) con carga alta Se solicitan muchas conexiones a la BD por minuto Pedir una conexión cada vez se convierte en un cuello de botella Solución: pool de conexiones Ejemplo de implementación <<interface>> java.sql.connection <<instantiate>> <<interface>> javax.sql.datasource ConnectionWrapper - c : java.sql.connection <<instantiate>> ConnectionPool - connections: java.util.linkedlist releaseconnection(c:connection):void

37 Pool de conexiones (2) Ejemplo de implementación (cont) ConnectionPool Una sóla instancia Cuando se crea, pide n conexiones a la BD (quizás usando DriverManager.getConnection) y las almacena en una lista getconnection Si quedan conexiones en la lista, devuelve una de ellas dentro de un objeto ConnectionWrapper (comprobando antes si está viva ) En otro caso, deja durmiendo al thread llamador usando wait releaseconnection (con visibilidad package ) Devuelve la conexión a la lista, y notifica (notifyall) a los posibles threads que esperan por una conexión ConnectionWrapper Encapsula a una conexión real close Usa releaseconnection para devolver la conexión real al pool finalize Si no se ha llamado a ConnectionWraper.close, lo llama Resto de operaciones Delegan en la conexión real

38 Pool de conexiones (y 3) Ejemplo de implementación (cont) El programador trabaja contra javax.sql.datasource y java.sql.connection Su código no sabe que está trabajando contra un pool de conexiones Los servidores de aplicaciones completos J2EE proporcionan implementaciones de DataSources con pool de conexiones A partir del tema 4 (tecnologías web), trabajaremos con pool de conexiones

39 Transacciones Permiten ejecutar bloques de código con las propiedades ACID (Atomicity-Consistency-Isolation- Durability) Por defecto, cuando se crea una conexión está en modo auto-commit Cada Statement y PreparedStatement que se ejecute sobre ella irá en su propia transacción Para ejecutar varias queries en una misma transacción es preciso Deshabilitar el modo auto-commit de la conexión Lanzar las queries Terminar con connection.commit() si todo va bien, o connection.rollback() en otro aso.

40 es.udc.fbellas.j2ee.jdbctutorial.transactionexample (1) Mismo ejemplo que es.udc.fbellas.j2ee.jdbctutorial.preparedstatementexample, pero ahora la inserción de cuentas se realiza en una única transacción public final class TransactionExample { public static void main (String[] args) { Connection connection = null; PreparedStatement preparedstatement = null; boolean commited = false; try { /* Get a connection with autocommit to "false". */ DataSource datasource = new SimpleDataSource(); connection = datasource.getconnection(); connection.setautocommit(false); << Insertar cuentas. >> /* Commit transaction. */ connection.commit(); commited = true;

41 es.udc.fbellas.j2ee.jdbctutorial.transactionexample (y 2) catch (SQLException e) { e.printstacktrace(); finally { try { if (preparedstatement!= null) { preparedstatement.close(); if (connection!= null) { if (!commited) { connection.rollback(); connection.close(); catch (SQLException e) { e.printstacktrace(); // try // main // class

42 Problemas de concurrencia En principio, las transacciones garantizan que no hay problemas si dos o más transacciones modifican datos comunes concurrentemente Propiedad I en ACID Para el programador es como si la BD serializase las transacciones En realidad, dependiendo de la estrategia de bloqueo que se use, pueden darse los siguientes problemas Dirty reads Non-repeatable reads Phantom reads

43 Dirty reads Una transacción lee datos actualizados por otra transacción, pero todavía no comprometidos Transacción 1 Transacción 2 begin SELECT X /* X = 0 */ X = X + 10 /* X = 10 */ UPDATE X /* X = 10 en BD pero no comprometido */ rollback /* X = 0 en BD */ begin SELECT X /* X = 10 */ X = X + 10 /* X = 20 */ UPDATE X /* X = 20 en BD pero no comprometido */ commit /* X = 20 en BD y comprometido */

44 Non-repeatable reads Una transacción relee un dato que ha cambiado mágicamente desde la primera lectura Transacción 1 Transacción 2 begin SELECT X /* X = 0 */ begin X = 20 SELECT X /* X = 20 */... commit UPDATE X /* X = 20 en BD pero no comprometido */ commit /* X = 20 en BD y comprometido */

45 Phantom reads Una transacción relanza una query de consulta y obtiene mágicamente más filas la segunda vez Transacción 1 Transacción 2 begin SELECT WHERE condition begin INSERT /* Inserta nuevas filas en BD (no comprometidas), algunas cumpliendo condition */ commit /* Inserciones comprometidas */ SELECT WHERE condition /* Ahora devuelve más filas */... commit

46 Transaction isolation levels (1) java.sql.connection proporciona el método settransactionisolation, que permite especificar el nivel de aislamiento deseado TRANSACTION_NONE: transacciones no soportadas TRANSACTION_READ_UNCOMMITED: pueden ocurrir dirty reads, non-repeatable reads y phantom reads TRANSACTION_READ_COMMITED: pueden ocurrir non-repeatable reads y phantom reads TRANSACTION_REPEATABLE_READ: pueden ocurrir phantom reads TRANSACTION_SERIALIZABLE: elimina todos los problemas de concurrencia Mayor nivel de aislamiento => la BD realiza más bloqueos => menos concurrencia

47 Transaction isolation levels (y 2) No todos los drivers/bds tienen porque soportar todos los niveles de aislamiento Suelen soportar TRANSACTION_READ_COMMITED y TRANSACTION_SERIALIZABLE Cuál es el nivel de aislamiento por defecto en las conexiones? Depende del driver/bd Suele ser TRANSACTION_READ_COMMITED

48 Una transferencia bancaria Ejemplos es.udc.fbellas.j2ee.jdbctutorial.transf erence*example Realizan una transferencia de dinero entre dos cuentas bancarias Veremos 4 estrategias Objetivo Estudiar los problemas de concurrencia que puede tener una transacción típica que Lee un dato (o más) de BD Lo actualizar en memoria (ej.: le suma una cantidad) Lo actualiza en BD Muchas transacciones son de este estilo

49 es.udc.fbellas.j2ee.jdbctutorial.transference1example (1) private static void transfer(connection connection, String sourceaccountidentifier, String destinationaccountidentifier, double amount) throws SQLException { boolean commited = false; try { connection.setautocommit(false); addamount(connection, sourceaccountidentifier, -amount); addamount(connection, destinationaccountidentifier, amount); connection.commit(); commited = true; connection.setautocommit(true); finally { if (!commited) { connection.rollback();

50 es.udc.fbellas.j2ee.jdbctutorial.transference1example (2) private static void addamount(connection connection, String accountidentifier, double amount) throws SQLException { PreparedStatement preparedstatement = null; try { /* Create "preparedstatement". */ String querystring = "UPDATE TutAccount" + " SET balance = balance +? WHERE accid =?"; preparedstatement = connection.preparestatement(querystring); /* Fill "preparedstatement". */ int i = 1; preparedstatement.setdouble(i++, amount); preparedstatement.setstring(i++, accountidentifier);

51 es.udc.fbellas.j2ee.jdbctutorial.transference1example (y 3) /* Execute query. */ int updatedrows = preparedstatement.executeupdate(); if (updatedrows == 0) { throw new SQLException(accountIdentifier + not found"); finally { if (preparedstatement!= null) { preparedstatement.close(); NOTA: En una situación real usaríamos InstanceNotFoundException o similar en vez de SQLException(accountIdentifier + not found )

52 Comentarios Asumiendo conexión con TRANSACTION_READ_COMMITED (que es lo normal) o superior => no hay problemas de concurrencia Sin embargo, el código anterior no puede detectar de una manera elegante y portable la situación de cuenta origen con balance insuficiente Se puede añadir una restricción de integridad (balance >= 0) sobre la columna balance Si se viola => el primer UPDATE provocará una SQLException Problemas: cómo sabe el programador si ha habido un problema en la BD (ej.: se ha caído) o si la cuenta no tiene suficiente balance? Y si quisiésemos actualizar otros datos de la cuenta?

53 es.udc.fbellas.j2ee.jdbctutorial.transference2example (1) private static void transfer(connection connection, String sourceaccountidentifier, String destinationaccountidentifier, double amount) throws SQLException, IOException { boolean commited = false; try { /* Prepare connection. */ connection.setautocommit(false); /* Read balances. */ double sourceaccountbalance = getbalance(connection, sourceaccountidentifier); double destinationaccountbalance = getbalance(connection, destinationaccountidentifier); /* Calculate new balances. */ if (sourceaccountbalance < amount) { throw new SQLException(sourceAccountIdentifier + ": Insufficient balance");

54 es.udc.fbellas.j2ee.jdbctutorial.transference2example (2) double sourceaccountnewbalance = sourceaccountbalance - amount; double destinationaccountnewbalance = destinationaccountbalance + amount; /* Update accounts. */ updatebalance(connection, sourceaccountidentifier, sourceaccountnewbalance); updatebalance(connection, destinationaccountidentifier, destinationaccountnewbalance); /* Commit. */ connection.commit(); commited = true; connection.setautocommit(true); finally { if (!commited) { connection.rollback();

55 es.udc.fbellas.j2ee.jdbctutorial.transference2example (3) private static double getbalance(connection connection, String accountidentifier) throws SQLException { PreparedStatement preparedstatement = null; ResultSet resultset = null; try { /* Create "preparedstatement". */ String querystring = "SELECT balance FROM TutAccount WHERE + " accid =?"; preparedstatement = connection.preparestatement(querystring); /* Fill "preparedstatement". */ int i = 1; preparedstatement.setstring(i++, accountidentifier); /* Execute query. */ resultset = preparedstatement.executequery();

56 es.udc.fbellas.j2ee.jdbctutorial.transference2example (4) if (!resultset.next()) { throw new SQLException(accountIdentifier + " not found"); /* Get results. */ return resultset.getdouble(1); finally { if (resultset!= null) { resultset.close(); if (preparedstatement!= null) { preparedstatement.close();

57 es.udc.fbellas.j2ee.jdbctutorial.transference2example (5) private static void updatebalance (Connection connection, String accountidentifier, double newbalance) throws SQLException { PreparedStatement preparedstatement = null; try { /* Create "preparedstatement". */ String querystring = "UPDATE TutAccount" + " SET balance =? WHERE accid =?"; preparedstatement = connection.preparestatement(querystring); /* Fill "preparedstatement". */ int i = 1; preparedstatement.setdouble(i++, newbalance); preparedstatement.setstring(i++, accountidentifier); /* Execute query. */ int updatedrows = preparedstatement.executeupdate();

58 es.udc.fbellas.j2ee.jdbctutorial.transference2example (y 6) if (updatedrows == 0) { throw new SQLException(accountIdentifier + " not found"); finally { if (preparedstatement!= null) { preparedstatement.close(); NOTA: En una situación real usaríamos InstanceNotFoundException e InsufficientBalanceException o similares en vez de los SQLException(...)

59 Comentarios (1) La solución es más genérica Podríamos tener getaccountstate y updateaccountstate en vez de getbalance y updatebalance, que nos valdrían para implementar transfer y otras operaciones que lean y/o actualicen datos de las cuentas Problema Si la conexión tiene un nivel inferior a TRANSACTION_SERIALIZABLE => problemas de concurrencia Ejemplo Dos transacciones ejecutando transfer(connection, fbellas-1, fbellas-2, 10) Supongamos inicialmente => (fbellas-1, 100) y (fbellas- 2, 200)

60 Comentarios (2) Leer balances => Transacción 1 sourceaccountbalance = 100 destinationaccountbalance = 200 Calcular nuevos balances => sourceaccountnewbalance = 90 destinationaccountnewbalance = 210 Actualizar cuentas => fbellas-1 => balance = 90 fbellas-2 => balance = 210 Leer balances => Transacción 2 sourceaccountbalance = 100 destinationaccountbalance = 200 Calcular nuevos balances => sourceaccountnewbalance = 90 destinationaccountnewbalance = 210 Actualizar cuentas => fbellas-1 => balance = 90 fbellas-2 => balance = 210 Problema: hemos perdido los efectos de una de las transacciones El problema puede darse siempre que se hagan varias transferencias simultáneas que tengan al menos una cuenta en común

61 Comentarios (y 3) Experimentar ejecutando... java classpath $J2EE_EXAMPLES_CLASSPATH es.udc.fbellas.j2ee.jdbctutorial.transference2example fbellas-1 fbellas-2... desde dos ventanas NOTA: Las cuentas fbellas-1 y fbellas-2 tienen que estar creadas y con balance >= 20

62 es.udc.fbellas.j2ee.jdbctutorial.transference3example Idem Transference2Example, excepto private static double getbalance(connection connection, String accountidentifier, boolean forupdate) throws SQLException { PreparedStatement preparedstatement = null; ResultSet resultset = null; try { /* Create "preparedstatement". */ String querystring = "SELECT balance FROM TutAccount WHERE + " accid =?"; if (forupdate) { querystring += " FOR UPDATE"; //...

63 Comentarios (1).. y la implementación de transfer usa getbalance(accountidentifier, true) No tiene problemas de concurrencia SELECT FOR UPDATE bloquea la fila (filas) en cuestión hasta que termine la transacción En el ejemplo anterior, si la transacción 1 ejecuta antes el SELECT FOR UPDATE sobre fbellas-1, cuando la segunda transacción intente hacer lo mismo, se quedará bloqueada hasta que termina la primera Si hubiese dos transferencias concurrentes del estilo.. transfer(connection, fbellas-1, fbellas-2, 10) transfer(connection, fbellas-2, fbellas-1, 10)... podría producirse una situación de inter-bloqueo => una de las transacciones gana, y la otra recibe un SQLException (la BD queda en estado consistente)

64 Comentarios (y 2) Experimentar ejecutando... java classpath $J2EE_EXAMPLES_CLASSPATH es.udc.fbellas.j2ee.jdbctutorial.transference3example fbellas-1 fbellas-2... desde dos ventanas... y... java classpath $J2EE_EXAMPLES_CLASSPATH es.udc.fbellas.j2ee.jdbctutorial.transference3example fbellas-1 fbellas-2 java classpath $J2EE_EXAMPLES_CLASSPATH es.udc.fbellas.j2ee.jdbctutorial.transference3example fbellas-2 fbellas-1... cada uno en su ventana

65 es.udc.fbellas.j2ee.jdbctutorial.transference4example (1) Idem Transference2Example, excepto private static void transfer(connection connection, String sourceaccountidentifier, String destinationaccountidentifier, double amount) throws SQLException, IOException { boolean commited = false; try { /* * Prepare connection. * * IMPORTANT: Some JDBC drivers require * "settransactionisolation to be called before * "setautocommit". */ int oldtransactionisolation = connection.gettransactionisolation(); connection.settransactionisolation( Connection.TRANSACTION_SERIALIZABLE); connection.setautocommit(false);

66 es.udc.fbellas.j2ee.jdbctutorial.transference4example (y 2) << Igual que en Transference2Example >>> /* Commit. */ connection.commit(); commited = true; connection.settransactionisolation( oldtransactionisolation); connection.setautocommit(true); finally { if (!commited) { connection.rollback();

67 Comentarios No tiene problemas de concurrencia Qué ocurre exactamente? BDs con Optimistic Locking => si se ejecutan dos transferencias concurrentes del tipo transfer(connection, fbellas-1, fbellas- 2, 10), una de ellas gana, y la otra recibe una SQLException (no hay bloqueos y la BD queda en estado consistente) BDs con Pessimistic Locking => Mismo comportamiento que Transference3Example Realizar experimentos similares a Transference3Example

68 Conclusiones acerca de concurrencia en transacciones (1) Transacciones que leen de BD, realizan cálculos en memoria (con lo leído) y actualizan en BD (con lo calculado) SELECT FOR UPDATE o TRANSACTION_SERIALIZABLE En otro caso Véase transparencia Transaction isolation levels (1) Para adoptar un enfoque sencillo (y mantenible), bastante portable y seguro (no propenso a errores) El código de los ejemplos de la asignatura usará TRANSACTION_SERIALIZABLE para todo tipo de transacciones

69 Conclusiones acerca de concurrencia en transacciones (y 2) En una aplicación claramente transaccional es mejor usar EJB (aunque usemos JDBC en la implementación de los EJBs) Las transacciones las gestiona el contenedor de EJBs El programador sólo necesita especificar qué métodos son transaccionales No hay que modificar el modo auto-commit de las conexiones ni cambiar el nivel de aislamiento EJB también implementa transacciones distribuidas EJB también permite automatizar la persistencia de objetos En resumen => más potencia + más portabilidad + más sencillez

70 Scrollable ResultSets Otros temas Permiten navegación sobre el ResultSet ResultSets actualizables Permiten hacer modificaciones a las filas correspondientes Procesamiento batch Permiten construir un Statement que agrupa a un conjunto de queries Soporte para tipos SQL3 BLOB, CLOB, arrays, STRUCT, etc.

JDBC. Una mini-introducci. introducción

JDBC. Una mini-introducci. introducción JDBC Una mini-introducci introducción Introducción JDBC (Java DataBase Connectivity) Protocolo para utilizar bases de datos relacionales desde Java Se basa en la utilización n de drivers que implementan

Más detalles

JDBC. Aplicaciones Distribuidas

JDBC. Aplicaciones Distribuidas JDBC Aplicaciones Distribuidas Contenido Definición. Arquitectura. Driver. Conexión. Consultas. Transacciones. Pool de conexiones. Patrón DAO. 2 JDBC Java DataBase Connectivity API Java para ejecutar consultas

Más detalles

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Base de Datos JDBC Unidad: 1 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Indice Repaso clase anterior Sentencias preparadas PreparedStatement

Más detalles

10. JDBC. 10. JDBC Introducción. java.sql

10. JDBC. 10. JDBC Introducción. java.sql 10 JDBC 287 10 JDBC Introducción javasql JDBC(Java DataBase Connectivity), consiste en un conjunto de clases e interfaces Java que permiten desarrollar aplicaciones de acceso a Bases de Datos JDBC envía

Más detalles

3.1 Tutorial de JDBC

3.1 Tutorial de JDBC 3.1 Tutorial de JDBC Índice Introducción Accesos básicos Tipos SQL y Java DataSources Pool de conexiones Transacciones Otros temas Introducción (1) Objetivos de este apartado Entender los mecanismos básicos

Más detalles

Practica 11: Conexión de Java con Bases de datos Access

Practica 11: Conexión de Java con Bases de datos Access Practica 11: Conexión de Java con Bases de datos Access En esta práctica vamos a crear una base de datos Microsoft Access y luego vamos a conectarnos desde una aplicación java haciendo uso del puente JDBC-ODBC

Más detalles

2.1 La interfaz de JDBC para el programador de aplicaciones... 3. 2.2 La interfaz JDBC para los controladores JDBC... 5

2.1 La interfaz de JDBC para el programador de aplicaciones... 3. 2.2 La interfaz JDBC para los controladores JDBC... 5 $SpQGLFH& &RQWURODGRUHV-'%& $%'& ( )+*-,/.1032/2465/(7%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%98 8:%;*-32)@0 *A.>BCEDGFH%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%3%EI

Más detalles

Java y MySQL. Ciclo de ejecución

Java y MySQL. Ciclo de ejecución Java y MySQL JDBC: Java DataBase Connectivity Cliente Servidor Aplicación Java Driver JDBC MySQL Conexión cliente-servidor MySQL Java Runtime Librerías JDBC El driver implementa las interfaces del paquete

Más detalles

3.9 Patrón Distributed callback

3.9 Patrón Distributed callback 3.9 Patrón Distributed callback Motivación (1) Queremos que la aplicación de administración de los termostatos Monitorize la temperatura de algunos termostatos, avisándonos si ésta baja o sube por encima

Más detalles

Acceso a BDs en Java: JDBC

Acceso a BDs en Java: JDBC Acceso a BDs en Java: JDBC Bases de Datos II 1 Introducción Para hacer una aplicación de BDs en Java se necesita disponer del driver adecuado para el SGBD. En nuestro caso necesitamos el de mysql. http://dev.mysql.com/downloads/connector/j/3.0.html

Más detalles

Práctica sobre compartición de instancias remotas.

Práctica sobre compartición de instancias remotas. Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta

Más detalles

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010 INTRODUCCION Los objetos usados en aplicaciones JAVA mantienen su estado y comportamiento mientras la aplicación se halle en ejecución. Generalmente se necesita mantener el estado y comportamiento de los

Más detalles

Acceso a BD desde Java. JDBC

Acceso a BD desde Java. JDBC JDBC (Java DataBase Connectivity) es una interfaz para programar la ejecución de sentencias SQL sobre SGBDR El API JDBC facilita programar el acceso a BD sin que se tenga en cuenta a que Servidor nos dirigimos

Más detalles

JDBC. Francisco Javier Solans Benedí Software Developper francisco.solans@neodoo.es

JDBC. Francisco Javier Solans Benedí Software Developper francisco.solans@neodoo.es JDBC Francisco Javier Solans Benedí Software Developper francisco.solans@neodoo.es Definición Es la interfaz Java estándar para acceder a base de datos. Neodoo Microsystems S.L. 2 Configuración Para usar

Más detalles

Oracle 12c DISEÑO Y PROGRAMACIÓN

Oracle 12c DISEÑO Y PROGRAMACIÓN Oracle 12c Se estudia el servidor de bases de datos empresarial Oracle 12c, centrándose especialmente en el punto de vista de un diseñador o programador de bases de datos, pero explicando también cómo

Más detalles

Universidad Don Bosco. Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC

Universidad Don Bosco. Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC Universidad Don Bosco CICLO: 01/2010 Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC Protección de miembros de la clase ->El principio de ocultación de información se

Más detalles

Ingeniería del Software Arquitectura Física en 3 niveles

Ingeniería del Software Arquitectura Física en 3 niveles Introducción En este laboratorio desplegaremos en 3 niveles físicos una aplicación que verifica si una cuenta y un password son correctos, basada en la que fue presentada en el laboratorio Separación entre

Más detalles

TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS

TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS 1 Introducción... 3 2 Despliegue de la aplicación de ejemplo... 3 2.1 Requisitos previos... 3 2.2 Despliegue de la aplicación... 3 3 Prueba

Más detalles

Formato para prácticas de laboratorio

Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA IC 2003-1 5046 Bases de Datos PRÁCTICA No. LABORATORIO DE Bases de Datos DURACIÓN (HORA 12 NOMBRE DE LA PRÁCTICA Aplicaciones Web con SQL

Más detalles

abacformacio@abacformacio.com 1

abacformacio@abacformacio.com 1 Cu Oracle 10gg Estudia el servidor de bases de datos Oracle 10g desde el punto de vista de un diseñador y programador de bases de datos, prestando atención a los objetos que puede crear, como tablas, consultas

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com

myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com info@myappgen.com Tutorial 1 Conexión con la Base de Datos Establecer la conexión con la base de datos no suele ser muy

Más detalles

Bases de Datos usando Java : JDBC. Ing. César Julio Bustacara Medina

Bases de Datos usando Java : JDBC. Ing. César Julio Bustacara Medina Bases de Datos usando Java : JDBC Ing. César Julio Bustacara Medina JDBC Java permite conectarse a bases de datos usando SQL-92 (Structured Query Language). La gran ventaja de esta utilidad es que una

Más detalles

El primer paso a realizar es crear la referencia JNDI para el origen de datos en el servidor local TomCat.

El primer paso a realizar es crear la referencia JNDI para el origen de datos en el servidor local TomCat. Conectar Base de Datos MySQL con JSF El primer paso a realizar es crear la referencia JNDI para el origen de datos en el servidor local TomCat. Comentar que antes, tenemos que crear la Base de Datos Wiki

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I

Más detalles

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS CICLO: 01/ 2015 Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: MATERIA: DOCENTES: GUIA DE LABORATORIO #12 USO DE JDBC Laboratorio de

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente Aplicaciones web con JSP Arquitectura J2EE para aplicaciones web Aplicación Applet HTML Cliente Servidor web JSP Servlet Web EJB Java Beans Lógica Negocio Otras BDs, ERPs etc BD Oracle Datos Cliente Servidor(es)

Más detalles

%& %)& '$!%*+ $, %%%&$ %%

%& %)& '$!%*+ $, %%%&$ %% OBJETIVO!!"#$$ %& '(%"#% (% %& %)& '$!%*+ $, %%%&$ %% REQUERIMIENTOS SOFTWARE VERSIÓN LINK Java Development Kit (JDK) 6 http://java.sun.com NetBeans 6.1 http://www.netbeans.org MySQL 5.0 http://dev.mysql.com/

Más detalles

U.E JUAN DE VELASCO CREAR DATOS EN SQL

U.E JUAN DE VELASCO CREAR DATOS EN SQL NOMBRE:LILIAN CAUJA U.E JUAN DE VELASCO CREAR DATOS EN SQL Lo primero que necesitamos para conectarnos al Servidor es el administrador que por defecto en algunas instalaciones no viene incluido, se puede

Más detalles

Programación Orientada a Objetos II. La Plataforma JDBC

Programación Orientada a Objetos II. La Plataforma JDBC Programación Orientada a Objetos II La Plataforma JDBC Introducción a (JDBC) Java Database Connectivity El API JDBC permite acceder a cualquier tipo de datos tabulares y comúnmente se utiliza para acceder

Más detalles

Bases de Datos Introducción a la Conectividad de

Bases de Datos Introducción a la Conectividad de Bases de Datos Introducción a la Conectividad de Bases de Datos con Java (JDBC) Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivo

Más detalles

Tutorial: Primeros Pasos con Subversion

Tutorial: Primeros Pasos con Subversion Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través

Más detalles

Manejo de Transacciones

Manejo de Transacciones Bases de Datos Transacciones 1 Manejo de Transacciones Jorge Pérez Rojas Universidad de Talca, II Semestre 2006 Bases de Datos Transacciones 2 Transacciones Hasta ahora el modelo de operación en la BD

Más detalles

Manual de NetBeans y XAMPP

Manual de NetBeans y XAMPP Three Headed Monkey Manual de NetBeans y XAMPP Versión 1.0 Guillermo Montoro Delgado Raúl Nadal Burgos Juan María Ruiz Tinas Lunes, 22 de marzo de 2010 Contenido NetBeans... 2 Qué es NetBeans?... 2 Instalación

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Java RMI. Sistemas Distribuidos Rodrigo Santamaría + Java RMI Sistemas Distribuidos Rodrigo Santamaría RMI Java RMI 2 + RMI 3 Remote Method Invocation: middleware para que un objeto que se ejecuta en una JVM use métodos de otro objeto que se ejecuta en

Más detalles

Ejercicios - Persistencia en Android: ficheros y SQLite

Ejercicios - Persistencia en Android: ficheros y SQLite Ejercicios - Persistencia en Android: ficheros y SQLite Índice 1 Uso de ficheros (0.5 puntos)...2 2 Persistencia con ficheros (0.5 puntos)...3 3 Base de datos: SQLiteOpenHelper (0.5 puntos)... 3 4 Base

Más detalles

Introducción a JDBC - Base de datos con Java

Introducción a JDBC - Base de datos con Java Introducción a JDBC - Base de datos con Java Objetivos: Reconocer los objetos para trabajar con bases de datos. Desarrollar aplicaciones que trabajen con bases de datos. Temas: Java Database Connectivity

Más detalles

5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados

5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados 5.4 Caso de estudio: diseño e implementación de la capa modelo de MiniPortal con EJB. Tipos de EJBs y patrones usados Introducción Qué tipos de EJBs ilustra MiniPortal? Entity Beans CMP (UserProfile) SLSBs

Más detalles

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

MySQL y Sesiones en PHP. Área de Ingeniería Telemática MySQL y Sesiones en PHP Contenido Repaso de SQL PHP y MySQL MySQL en PHP 2 Numéricos Standard: Repaso SQL: tipo de datos INTEGER o INT, SMALLINT, DECIMAL o DEC, NUMERIC FLOAT, REAL, DOUBLE PRECISION BIT

Más detalles

Desarrollo de Servicios Web con JBuilder

Desarrollo de Servicios Web con JBuilder Artículos técnicos Grupo Danysoft: Desarrollo de Servicios Web con JBuilder Segunda parte Oscar Cristobal Ruiz Departamento Java Equipo Grupo Danysoft Enero 2003 - (902) 123146 www.danysoft.com Desarrollo

Más detalles

Desarrollo de Software con

Desarrollo de Software con Desarrollo de Software con Antonio J. Vélez Q. Universidad del Valle Sede Palmira Requerimientos de Software Java 2 SE Development Kit java.sun.com/javase Java EE 5 SDK java.sun.com/javaee Netbeans (IDE)

Más detalles

T12 Vistas y tablas temporales

T12 Vistas y tablas temporales 1 de 9 17/05/2013 14:01 Lecciones SQL > T12 Vistas y tablas temporales En esta sesión vamos a mostrar dos tipos de objetos de uso habitual en cualquier SGBD: las vistas y las tablas temporales. Mientras

Más detalles

Manual De Instalación MySQl 5.1 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL 5.1.40

Manual De Instalación MySQl 5.1 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL 5.1.40 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL 5.1.40 Página 1 de 15 1.- Ejecutamos el fichero mysql-essential-5.1.40-win32. Espera unos minutos mientras se cargan los archivos necesarios para la instalación

Más detalles

Oracle NET: Conexión a BD Oracle

Oracle NET: Conexión a BD Oracle Oracle NET: Conexión a BD Oracle Juan Manuel Vara 1 Introducción Para interactuar con cualquier BBDD necesitamos una aplicación software a la que generalmente nos referimos como cliente En realidad, interactuar

Más detalles

Introducción a los Sistemas de Gestión de Bases de Datos

Introducción a los Sistemas de Gestión de Bases de Datos a los Sistemas de Gestión de Bases de Datos Servicios y Aplicaciones Telemáticas gsyc-profes@gsyc.escet.urjc.es Noviembre de 2008 c 2008 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados.

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

JDBC: Java DataBase Conectivity

JDBC: Java DataBase Conectivity JDBC: Java DataBase Conectivity Integrantes: Pablo Benaprés M. Tomás Girardi J. Roberto Vargas H. Introducción Que es? API Driver Java Interactúa a con bases de datos Ejecuta consultas Recibe resultados

Más detalles

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences Índice 1 Compartir datos entre actividades con Shared Preferences (0.75 puntos)... 2 2 Actividad de preferencias (0.75

Más detalles

Acceso a bases de datos con JDBC

Acceso a bases de datos con JDBC Acceso a bases de datos con JDBC Aplicaciones Web/Sistemas Web Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Facultad de Informática Universidad Complutense Madrid Material

Más detalles

Uso de excepciones en Java

Uso de excepciones en Java Uso de excepciones en Java En Java, cuando se produce un error en un método, se lanza un objeto Throwable. Cualquier método que haya llamado al método puede capturar la excepción y tomar las medidas que

Más detalles

Dossier de prácticas

Dossier de prácticas Dossier de prácticas Intranet / Extranet Màster d Enginyeria del Software Desenvolupament d aplicacions sobre Internet Fundació Politècnica de Catalunya Jaume Moral Ros Albert Obiols Vives 1 Dossier de

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!

Más detalles

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA José Luis Pastrana Brincones (pastrana@lcc.uma.es) Dpto. Lenguajes y Ciencias de la Computación. Universidad de Málaga

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial.

Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial. Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial. Para este parcial, debe modificarse la práctica del primer parcial de la siguiente manera: Servidor: la aplicación

Más detalles

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios Diplomado Java Descripción El lenguaje de programación Java es uno de los más utilizados hoy en día. Su potencia, simplicidad, funcionalidad y capacidad hacen que este lenguaje sea una de las herramientas

Más detalles

JDBC Julio 2004. 1. Introducción. 1.1. JDBC... 2 1.2. Arquitecturas típicas con JDBC... 3

JDBC Julio 2004. 1. Introducción. 1.1. JDBC... 2 1.2. Arquitecturas típicas con JDBC... 3 Índice 1. Introducción 1 1.1. JDBC.. 2 1.2. Arquitecturas típicas con JDBC 3 2. Programacion con JDBC 4 2.1. La clase con el controlador y el URL a la Base de Datos. 4 2.2. Realización de la conexión 6

Más detalles

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo,

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

Pruebas de unidad con JUnit

Pruebas de unidad con JUnit Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro

Más detalles

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT Versión 1. Mayo de 2001 Luis Vinuesa Martínez. Departamento de Informática Universidad de Oviedo vinuesa@correo.uniovi.es www.di.uniovi.es/~vinuesa ÍNDICE. Introducción...

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

CURSORES EN SQL SERVER

CURSORES EN SQL SERVER Año del Centenario de Machu Picchu para el mundo CURSORES EN SQL SERVER Curso: IMPLEMENTACION DE BASE DE DATOS VII Ciclo Integrantes: Vásquez Paredes, Pablo Bustamante Auccasi, Janett Córdova Farfán, Carlos

Más detalles

Contenido Manejo de Concurren en Mysql... 2 Modos de bloqueo InnoDB... 2 InnoDB y AUTOCOMMIT... 3

Contenido Manejo de Concurren en Mysql... 2 Modos de bloqueo InnoDB... 2 InnoDB y AUTOCOMMIT... 3 Manejo de Concurrencia en Mysql Contenido Manejo de Concurren en Mysql... 2 Modos de bloqueo InnoDB... 2 InnoDB y AUTOCOMMIT... 3 InnoDB y TRANSACTION ISOLATION LEVEL... 3 Lecturas consistentes que no

Más detalles

Universidad ORT - Arquitectura de Software. Requisitos

Universidad ORT - Arquitectura de Software. Requisitos Requisitos Versión 1.5 (o superior) de la JDK de Java NetBeans 6.5 como IDE de desarrollo JBoss 4.2.x como Application Server Variable de entorno de Windows JAVA_HOME apuntando al directorio de instalación

Más detalles

TRABAJO GRUPAL TEMA: COMO CREAR BASE DE DATOS EN SQL

TRABAJO GRUPAL TEMA: COMO CREAR BASE DE DATOS EN SQL TRABAJO GRUPAL INTEGRANTES: Curso: 3ero C Informática Erika Caisa Erika Córdova Joselyn Rea TEMA: COMO CREAR BASE DE DATOS EN SQL Lo primero que necesitamos para conectarnos al Servidor es el administrador

Más detalles

Ejercicio 1 (3 puntos).-

Ejercicio 1 (3 puntos).- URJC Ingeniería Técnica de Gestión Abril 2011 Asignatura: SOFTWARE AVANZADO Normas: La prueba consta de 2 ejercicios. La máxima nota del examen es un 8. Siendo la práctica la que añade los 2 puntos que

Más detalles

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas. Vistas. El resultado de una consulta en el caso de SQL siempre es una tabla, ésta se puede hacer permanente dentro de la base de datos. En este caso se dice que esta tabla resultado es una vista o una

Más detalles

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL. GUIA DE LABORATORIO # 5 Nombre de la Practica: Manipulación de datos Lugar de ejecución: Centro de Computo MATERIA: Base de Datos II CICLO: 02-2012 I. OBJETIVOS ESPECIFICOS Qué el estudiante: Manipule

Más detalles

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported PROGRAMACIÓN ORIENTADA A OBJETOS APLICADA A BASES DE DATOS Por LAURA NOUSSAN LETTRY BrowserSQL MySQL Workbench en Linux (Abril 2015, Mendoza) Aviso Legal El presente libro electrónico se distribuye bajo

Más detalles

Patrones para persistencia (I) Ingeniería del Software II

Patrones para persistencia (I) Ingeniería del Software II Patrones para persistencia (I) Ingeniería del Software II 1 Patrones para la construcción del esquema relacional En todos los ejemplos realizaremos transformaciones del siguiente diagrama de clases: Figura

Más detalles

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos)

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos) Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos) 1 Actores OPERADOR CLIENTE TAXISTA 2 Actor Cliente Identificarse

Más detalles

UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO

UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO www.ubs-systems.com Teléfono: 91 3681185 UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO Unidesys Versión 2011 1 CONTENIDO 1 INTRODUCCIÓN 3 2 FUENTES DE DATOS 4 3 INSTALACIÓN DEL

Más detalles

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro USAR MYSQL EN PHP PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL. Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado que

Más detalles

Oracle Database 10g: Taller de Administración I 1-2

Oracle Database 10g: Taller de Administración I 1-2 Oracle Database 10g: Taller de Administración I 1-2 Marco de gestión Hay tres componentes principales del marco de gestión de la BD Oracle: Labasededatosylainstanciaqueseestágestionando Un listener que

Más detalles

XPERTO EN DISEÑO DE PÁGINAS WEB

XPERTO EN DISEÑO DE PÁGINAS WEB Curso ICA de: EXPERTO EN DISEÑO DE PÁGINAS WEB Módulo 1: Program. cliente: JavaScript Estudia el lenguaje JavaScript para crear guiones o scripts que se incluyen en las páginas web y que son ejecutados

Más detalles

Value Object (1) Agrupar un conjunto de atributos procedentes de uno o varios objetos del dominio. Data Transfer Object, Replicate Object

Value Object (1) Agrupar un conjunto de atributos procedentes de uno o varios objetos del dominio. Data Transfer Object, Replicate Object 2.3.1 Value Object Value Object (1) Intención Agrupar un conjunto de atributos procedentes de uno o varios objetos del dominio También conocido como Data Transfer Object, Replicate Object Motivación En

Más detalles

Aplicación de Base de Datos con MySQL, ODBC y Delphi

Aplicación de Base de Datos con MySQL, ODBC y Delphi Teoría y Diseño / Elementos de Bases de Datos Aplicación de Base de Datos con MySQL, ODBC y Delphi Lic. Diego R. García Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del

Más detalles

Capítulo 12: Indexación y asociación

Capítulo 12: Indexación y asociación Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación

Más detalles

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

USANDO SERVLETS EN UN SERVIDOR WEB RESIN USANDO SERVLETS EN UN SERVIDOR WEB RESIN Servidor Web Resin Resin es un servidor web que permite no solo despachar un página web, sino aplicaciones web construidos bajo la arquitectura J2EE, así como el

Más detalles

Aplicaciones Web (Curso 2014/2015)

Aplicaciones Web (Curso 2014/2015) Bases de Datos (III) Aplicaciones Web (Curso 2014/2015) Jesús Arias Fisteus // jaf@it.uc3m.es Bases de Datos (III) p. 1 JDBC: Acceso a bases de datos relacionales en Java Bases de Datos (III) p. 2 JDBC

Más detalles

Guía de Instalación. Versiones del documento

Guía de Instalación. Versiones del documento Guía de Instalación Versiones del documento Autor Fecha Observaciones Pablo J. Urbano Santos 03/12/08 Cambio de logos Luis Ig. Bacas Riveiro Pablo J. Urbano Santos Versiones anteriores 1 Índice de contenido

Más detalles

ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2

ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2 ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2 Versión 1.0 Área de Integración y Arquitectura de Aplicaciones Hoja de Control Título con Weblogic 9.2 Documento de Referencia Responsable

Más detalles

CAPÍTULO 5 IMPLEMENTACIÓN DEL SISTEMA

CAPÍTULO 5 IMPLEMENTACIÓN DEL SISTEMA CAPÍTULO 5 IMPLEMENTACIÓN DEL SISTEMA Capítulo 7: Resultados y Trabajo a Futuro 5.1 Servidor Web Jakarta-Tomcat Para el desarrollo de un Sistema de Comercio Electrónico (SCE) se uso un servidor Web compatible

Más detalles

Microsoft SQL Server 2005

Microsoft SQL Server 2005 Microsoft SQL Server 2005 Módulo 1: Diseño y programación Estudia el servidor de bases de datos SQL Server 2005 desde el punto de vista de un diseñador y programador de bases de datos, prestando atención

Más detalles

2.6.2.- Aplicaciones de las vistas. 2.6.1.- Concepto de vista. 2.6.3.- Vistas en SQL. 2.6.3.- Vistas en SQL.

2.6.2.- Aplicaciones de las vistas. 2.6.1.- Concepto de vista. 2.6.3.- Vistas en SQL. 2.6.3.- Vistas en SQL. 2.6.1.- Concepto de vista. Una vista es una tabla derivada de otras tablas (básicas o virtuales). Una vista se caracteriza porque: Se considera que forma parte del esquema externo. Una vista es una tabla

Más detalles

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS Servicio DNS - 1 - Servicio DNS...- 3 - Definición... - 3 - Instalación... - 5 - Configuración del Servidor DNS...- 10 - - 2 - Servicio DNS Definición

Más detalles

Técnicas de Programación

Técnicas de Programación Técnicas de Programación U.D.1.2.- Programas informáticos de uso general: procesadores de texto y bases de datos. Definición Una base de datos es una recopilación de información relativa a un asunto o

Más detalles

Computación Web (Curso 2015/2016)

Computación Web (Curso 2015/2016) Bases de Datos (III) Computación Web (Curso 2015/2016) Jesús Arias Fisteus // jaf@it.uc3m.es Bases de Datos (III) p. 1 JDBC: Acceso a bases de datos relacionales en Java Bases de Datos (III) p. 2 JDBC

Más detalles