java con base de datos

24

Upload: magaly-portocarrero-labajos

Post on 13-Apr-2017

20 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Java con base de datos
Page 2: Java con base de datos

JAVA CON BASE DE DATOSDEFINICION

Es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del

sistema operativo donde se ejecute o de la base de datos a la cual se accede.

Se presenta como una colección de interfaces Java y métodos de gestión de manejadores de conexión hacia cada modelo específico de base de datos Un

manejador de conexiones hacia un modelo de base de datos en particular es un conjunto de clases que implementan las interfaces Java.

Page 3: Java con base de datos

 El driver con la base de datos

Lo primero que necesitamos para conectarnos con una base de datos es un Driver (o Connector) con ella. Ese Driver es la clase que, de alguna forma, sabe cómo hablar con la base de datos.

Java no viene con todos los Drivers de todas las posibles bases de datos del mercado. Debemos ir a internet y obtener el Driver, normalmente en la página de nuestra base de datos.

Para el caso de MySQL, podemos descargarlo de. Nos bajamos el mysql-connector-java-5.0.5.zip, lo desempaquetamos en algún sitio y nos quedamos con el mysql-connector-java-5.0.5-bin.jar que viene dentro.

Page 4: Java con base de datos

• El objeto Connection representa una conexión HTTP entre la prueba dinámica (el cliente) y el servidor Web. La prueba abre la conexión, aunque tanto la prueba como el servidor Web pueden cerrarla.

• Se pueden enviar múltiples solicitudes mediante una sola conexión, siempre que esta última permanezca abierta.

OBJETO CONNECTI

ON

Page 5: Java con base de datos

Statement

Tiene muchos métodos, pero hay dos interesentantes: executeUpdate() y executeQuery(). El primero se usa para sentencias SQL que impliquen modificaciones en la base de datos (INSERT, UPDATE, DELETE, etc). El segundo sólo para consultas (SELECT y similares).

Page 6: Java con base de datos

 

Ejecución de sentencias usando objetos Statement.

La interfase Statement nos suministra tres métodos diferentes para ejecutar sentencias SQL, executeQuery, executeUpdate y

execute. El método a usar esta determinado por el producto de la sentencia SQL.

El método executeUpdate se usa para ejecutar sentencias INSERT, UPDATE ó DELETE así como sentencias SQL DDL (Data

Definition Language) como CREATE TABLE o DROP TABLE.

Todos los métodos que ejecutan sentencias cierran los objetos Resultset abiertos como resultado de las llamadas a Statement. Esto quiere decir que es necesario completar el proceso con el

actual objeto Resulset antes de reejecutar una sentencia Statement.

Page 7: Java con base de datos

REALIZACIÓN DE STATEMENT

Un objeto Statement se usa para enviar sentencias SQL a la base de datos. Actualmente hay tres tipos de objetos Statement, todos los cuales actúan como contenedores para la ejecución de sentencias en una conexión dada: Statement, PreparedStatement que hereda de Statement y CallableStatement que hereda de PreparedStatement.

Un objeto Statement se usa para ejecutar una sentencia SQL simple sin parámetros. Un objeto PreparedStatement se usa para ejecutar sentencias SQL precompiladas con o sin parámetros IN; y un objeto CallableStatement se usa para ejecutar un procedimieno de base de datos almacenado.

Page 8: Java con base de datos

La interfase Statement suminstra métodos básicos para ejecutar sentencias y devolver resultados. La interfase PreparedStatement añade métodos para trabajat con los parámetros IN; y la interfase CallableStatement añade métodos para trabajar con parameters OUT.

Una vez establecida la conexión con una base de datos particular, esta conexión puede usarse para enviar sentencias SQL. Un objeto Statement se crea mediante el método de Connection createStatement, como podemos ver en el siguiente fragmento de código.

Connection con = DriverManager.getConnection(url, "sunny", "");Statement stmt = con.createStatement();

La sentencia SQL que será enviada a la base de datos es alimentada como un argumento a uno de los métodos de ejecución del objeto Statement. Por ejemplo:

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");

Page 9: Java con base de datos

OBJETO CONNECTION

El objeto Connection representa una conexión HTTP entre la prueba dinámica (el cliente) y el servidor Web. La prueba abre la conexión, aunque tanto la prueba como el servidor Web pueden cerrarla.

Page 10: Java con base de datos

Propiedad Descripción

IsOpen Comprueba si la conexión está abierta.

Port Obtiene el número del puerto utilizado por la conexión.

RedirectDepth Obtiene o define el número de redirecciones de encabezados HTTP que se siguen.

Server Obtiene el nombre del host o dirección IP del servidor al que está conectado el cliente.

UseSSL Comprueba si la conexión HTTP entre el cliente y el servidor utiliza el protocolo SSL ("https://").

PROPIEDADES

Page 11: Java con base de datos

Método Descripción

Close Cierra la conexión, si está abierta. No devuelve un error si la conexión ya está cerrada.

Send Envía una solicitud HTTP al servidor.

MÉTODOS

Page 12: Java con base de datos

OBJETO STATEMENT

Tiene muchos métodos, pero hay dos interesentantes: executeUpdate() y executeQuery(). El primero se usa para sentencias SQL que impliquen modificaciones en la base de datos (INSERT, UPDATE, DELETE, etc). El segundo sólo para consultas (SELECT y similares).

Nuestra creación de tabla afecta a la base de datos, así que con executeUpdate().

st.executeUpdate("CREATE TABLE contacto (id INT AUTO_INCREMENT, PRIMARY KEY(id), nombre VARCHAR(20), apellidos VARCHAR(20), teléfono VARCHAR(20))"); Esto crea una tabla contacto con cuatro

campos: id, nombre, apellidos y teléfono. Para borrar la tablita esta, lo mismo, pero con DROP en vez de CREATE. st.executeUpdate("DROP TABLE contacto");

Page 13: Java con base de datos

String nombres[]={"Juan","Pedro","Antonio"};String apellidos[]={"Gomez","Lopez","Alvarez"};String telefonos[]={"123","456","789"};...for (int i=0;i<nombres.length;i++)   st.executeUpdate("INSERT INTO contacto (nombre, apellidos, telefono) VALUES ('"+nombres[i]+"','"+apellidos[i]+"','"+telefonos[i]+"' )");También en un try-catch.

Vamos a hacer un esfuerzo de imaginación y supongamos que no

hemos borrado la tabla contacto, que sigue existiendo en base de datos.

Vamos a meterle datos.

Page 14: Java con base de datos

Ejecución de sentencias usando objetos Statement.

La interfase Statement nos suministra tres métodos diferentes para ejecutar sentencias SQL, executeQuery, executeUpdate y execute. El método a usar está determinado por el producto de la sentencia SQL.

El método executeQuery está diseñado para sentencias que producen como resultado un único result set tal como las sentencias SELECT. El método executeUpdate se usa para ejecutar sentencias INSERT, UPDATE ó DELETE así como sentencias SQL DDL (Data Definition Language) como CREATE TABLE o DROP TABLE. El efecto de una sentencia INSERT, UPDATE o DELETE es una modificación de una o más columnas en cero o más filas de una tabla.

Page 15: Java con base de datos

El valor devuelto de executeUpdate es un entero que indica el número de filas que han sido afectadas (referido como update count). Para sentencias tales como CREATE TABLE o DROP TABLE, que no operan sobre filas, le valor devuelto por executeUpdate es siempre cero.

El método execute se usa para ejecutar sentencias que devuelven más de un result set, más que un update count o una combinación de ambos. Como es esta una característica avanzada que muchos programadores no necesitan nunca se verá en su propia sección.

Los objetos Statement en sí mismos no contienen una sentencia SQL, por tanto debe suministrarse como un argumento a los métodos Statement.execute. Los objetos PreparedStatement no suministran una sentencia SQL como argumento a estos métodos puesto que ya tienen la sentencia precompilada.

Page 16: Java con base de datos

Realización de Statement

Cuando una conexión está en modo auto-commit, las sentencias ejecutadas son ‘comitadas’ o rechazadas cuando se completan.

Una sentencia se considera completa cuando ha sido ejecutada y se han devuelto todos los resultados.

Para el método executeUpdate, una sentencia se completa cuando se ejecuta.

Algunos DBMS tratan cada sentencia en un procedimiento almacenado como sentencias separadas.

En el primer caso, cada sentencia individual es commitada. En el segundo, se commiten todas juntas.

Page 17: Java con base de datos

Cerrar objetos Statement

Los objetos Statement se cerrarán automáticamente por el colector de basura de Java (garbage collector). No obstante se recomienda como una buena práctica de programación que se cierren explícitamente cuando no sean ya necesarios. Esto libera recursos DBMS inmediatamente y ayuda a evitar potenciales problemas de memoria.

Page 18: Java con base de datos

ResultSet 

ResultSet se cierra solo cuando hacemos otra llamada execute() al Statement del que obtuvimos este ResultSet o bien cuando el recolector de basura "recolecta" al ResultSet. No nos preocupa en principio que se quede abierto, porque se acabará cerrando solo.

Page 19: Java con base de datos

MANIPULACIÓN DE LOS DATOS DE UN

RESULTSET EN JAVA

Un ejemplo sencillo de esto es el poder determinar la cantidad de filas que retorna una consulta SQL en un objeto ResultSet; en muchos foros de programación recomiendan el realizar nuevamente una consulta a la BD con un COUNT pero eso es algo que no me resulta muy funcional, especialmente en BD excesivamente grandes como las que manejo en la empresa (600Gb), piensen: "realizar otra consulta".

Page 20: Java con base de datos

EJEMPLOS

Page 21: Java con base de datos

CÓMO REALIZAR UNA CONSULTA

         // Define la conexión        Connection laConexion = AdministradorDeConexiones.getConnection();       

        // Arma la consulta y la ejecuta        String laConsulta = "SELECT * FROM alumnos";

        Statement stmtConsulta = laConexion.createStatement();        ResultSet rs = stmtConsulta.executeQuery(laConsulta);       

        // Muestra los datos        while( rs.next() )        System.out.println( "ID: " + rs.getInt("alu_id") + " -- " + "Nombre: " + rs.getString("alu_nombre") + " -- " + "Apellido: " + rs.getString("alu_apellido") );       

        // Cierra el Statement y la Connection        stmtConsulta.close();        laConexion.close();

Page 22: Java con base de datos

COMO REALIZAR UNA INSERCIÓN

      // Define la conexión        Connection laConexion = AdministradorDeConexiones.getConnection();   

        // Arma la sentencia de inserción y la ejecuta        String laInsercion = "INSERT INTO alumnos (alu_id, alu_nombre, alu_apellido) VALUES (101, 'Manuel', 'Santos')";

        Statement stmtInsercion = laConexion.createStatement();        stmtInsercion.execute(laInsercion);       

        // Cierra el Statement y la Connection        stmtInsercion.close();        laConexion.close();       

        // Informa que la inserción ha sido realizada con éxito        System.out.println("La inserción ha sido realizada con éxito...");

Page 23: Java con base de datos

Como realizar una actualización

      // Define la conexión        Connection laConexion = AdministradorDeConexiones.getConnection();       

        // Arma la sentencia de actualización y la ejecuta        String laActualizacion = "UPDATE alumnos SET alu_apellido = 'Trobbiani' WHERE alu_id = 101";

        Statement stmtActualizacion = laConexion.createStatement();        stmtActualizacion.execute(laActualizacion);       

        // Cierra el Statement y la Connection        stmtActualizacion.close();        laConexion.close();       

        // Informa que la actualización ha sido realizada con éxito        System.out.println("La actualización ha sido realizada con éxito...");

Page 24: Java con base de datos

Como realizar una eliminación

      // Define la conexión        Connection laConexion = AdministradorDeConexiones.getConnection();       

        // Arma la sentencia de eliminación y la ejecuta        String laEliminacion = "DELETE FROM alumnos WHERE alu_id = 101";

        Statement stmtEliminacion = laConexion.createStatement();        stmtEliminacion.execute(laEliminacion);       

        // Cierra el Statement y la Connection        stmtEliminacion.close();        laConexion.close();       

        // Informa que la eliminación ha sido realizada con éxito        System.out.println("La eliminación ha sido realizada con éxito...");