java con base de datos
TRANSCRIPT
![Page 1: Java con base de datos](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/1.jpg)
![Page 2: Java con base de datos](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/4.jpg)
• 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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/9.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/18.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/19.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/20.jpg)
EJEMPLOS
![Page 21: Java con base de datos](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/21.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/22.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/23.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062902/58eea1391a28abc31c8b460d/html5/thumbnails/24.jpg)
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...");