apuntes:bbdd
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
apuntes:bbdd [2019/02/10 20:54] – created Santiago Faci | apuntes:bbdd [2023/05/28 12:04] (current) – [Creación del CRUD] Santiago Faci | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Bases de Datos ====== | ====== Bases de Datos ====== | ||
+ | |||
+ | ===== El lenguaje SQL ===== | ||
+ | |||
+ | El lenguaje [[https:// | ||
+ | |||
+ | Las operaciones más comunes son las que se conoce como DML (Data Manipulation Language), que son las instrucciones que permiten manipular la información, | ||
+ | |||
+ | Para el momento inicial, el de crear la Base de Datos vacía, que sirva como soporte para los datos, utilizaremos una aplicación como [[https:// | ||
+ | |||
+ | ==== Registrar información ==== | ||
+ | |||
+ | La sentencia de inserción '' | ||
+ | |||
+ | <code sql> | ||
+ | INSERT INTO nombre_tabla [ ' | ||
+ | { VALUES ' | ||
+ | </ | ||
+ | |||
+ | Veamos algunos ejemplos: | ||
+ | |||
+ | === Registra un producto en la base de datos === | ||
+ | |||
+ | <code sql> | ||
+ | INSERT INTO productos (nombre, precio) VALUES (' | ||
+ | </ | ||
+ | |||
+ | === Registra un par de productos en la base de datos === | ||
+ | <code sql> | ||
+ | INSERT INTO productos (nombre, precio) VALUES (' | ||
+ | </ | ||
+ | |||
+ | ==== Modificar información ==== | ||
+ | |||
+ | La sentencia para modificar datos '' | ||
+ | |||
+ | Hay que tener en cuenta que la claúsula '' | ||
+ | |||
+ | <code sql> | ||
+ | UPDATE nombre_tabla | ||
+ | SET columna = valor [ {, columna = valor} ] | ||
+ | [ WHERE condiciones ] | ||
+ | </ | ||
+ | |||
+ | Así, en el siguiente ejemplo, si no se especificará en la claúsula '' | ||
+ | |||
+ | Veamos algunos ejemplos: | ||
+ | |||
+ | === Modifica el precio de un producto para aumentarlo === | ||
+ | <code sql> | ||
+ | UPDATE productos | ||
+ | SET precio = precio + 10 | ||
+ | WHERE nombre = ' | ||
+ | </ | ||
+ | |||
+ | === Modifica directamente el precio sobrescribiéndolo === | ||
+ | <code sql> | ||
+ | UPDATE productos | ||
+ | SET precio = 4.5 | ||
+ | WHERE nombre = ' | ||
+ | </ | ||
+ | |||
+ | === Modifica el precio de varios productos === | ||
+ | <code sql> | ||
+ | UPDATE productos | ||
+ | SET precio = precio * 1.25 | ||
+ | WHERE precio BETWEEN 1 AND 5 | ||
+ | </ | ||
+ | |||
+ | ==== Eliminar información ==== | ||
+ | |||
+ | La sentencia para eliminar información '' | ||
+ | |||
+ | Hay que tener en cuenta que, de forma similar a como ocurre con la sentencia '' | ||
+ | |||
+ | <code sql> | ||
+ | DELETE FROM nombre_tabla | ||
+ | [ WHERE condiciones ] | ||
+ | </ | ||
+ | |||
+ | Veamos algunos ejemplos: | ||
+ | |||
+ | === Elimina el producto que se llama ' | ||
+ | <code sql> | ||
+ | DELETE FROM productos | ||
+ | WHERE nombre = ' | ||
+ | </ | ||
+ | |||
+ | === Elimina los productos cuyo precio es menor que 10 === | ||
+ | <code sql> | ||
+ | DELETE FROM productos | ||
+ | WHERE precio < 10 | ||
+ | </ | ||
+ | |||
+ | === Elimina los productos ' | ||
+ | <code sql> | ||
+ | DELETE FROM productos | ||
+ | WHERE nombre = ' | ||
+ | </ | ||
+ | |||
+ | === Elimina todos los productos === | ||
+ | <code sql> | ||
+ | DELETE FROM productos | ||
+ | </ | ||
+ | |||
+ | ==== Consultar/ | ||
+ | |||
+ | La sentencia más compleja y utilizada es '' | ||
+ | |||
+ | Veremos una versión reducida de dicha sentencia, donde podremos especificar que campos visualizar con la claúsula '' | ||
+ | |||
+ | Al igual que ocurre con '' | ||
+ | |||
+ | <code sql> | ||
+ | SELECT columnas | ||
+ | FROM tablas | ||
+ | [ WHERE condiciones ] | ||
+ | [ ORDER BY columnas_a_ordenar [ASC|DESC] ] | ||
+ | </ | ||
+ | |||
+ | Veamos algunos ejemplos: | ||
+ | |||
+ | === Muestra el nombre y el precio de todos los productos cuyo precio es mayor que 5. Muestra los resultados ordenados por el nombre del producto en orden ascendente === | ||
+ | <code sql> | ||
+ | SELECT nombre, precio | ||
+ | FROM productos | ||
+ | WHERE precio > 5 | ||
+ | ORDER BY nombre ASC | ||
+ | </ | ||
+ | |||
+ | === Muestra el nombre de todos los productos. Muestra los resultados en el orden en que se hayan insertado en la tabla === | ||
+ | <code sql> | ||
+ | SELECT nombre | ||
+ | FROM productos | ||
+ | </ | ||
+ | |||
+ | === Muestra el nombre y precio de los productos ' | ||
+ | <code sql> | ||
+ | SELECT nombre, precio | ||
+ | FROM productos | ||
+ | WHERE precio = 10 AND nombre = ' | ||
+ | </ | ||
+ | |||
+ | === Muestra todos los campos de todos los productos === | ||
+ | <code sql> | ||
+ | SELECT * | ||
+ | FROM productos | ||
+ | </ | ||
+ | |||
+ | ===== Acceso a una base de datos desde Java y JDBC ===== | ||
+ | |||
+ | El acceso a Bases de Datos desde Java se hace utilizando lo que se conoce como el driver de JDBC, que es la API de Java que ofrece toda una serie de Clases y sus métodos para operar con Bases de Datos. | ||
+ | |||
+ | Java define la API para JDBC y tiene que ser cada fabricante quien defina la implementación o driver, que será el fichero que debemos incluir a nuestro proyecto para que éste pueda conectarse a un SGBD (Sistema Gestor de Bases de Datos) concreto y comunicarse con él mediante lenguaje //SQL//. | ||
+ | |||
+ | En nuestro caso, vamos a trabajar con [[https:// | ||
+ | |||
+ | Para comenzar a trabajar con SQLite, lo primero es descargar el [[https:// | ||
+ | |||
+ | ==== Conectar con una base de datos SQLite y registrar datos ==== | ||
+ | |||
+ | Para conectar con una Base de Datos, en este caso de //SQLite//, sólo hay que cargar el driver e indicar la ubicación de la misma. | ||
+ | |||
+ | El siguiente ejemplo sirve como ejemplo de conexión y de comprobación de que el driver está bien cargado y todo funciona correctamente. La conexión queda establecida sobre el objecto '' | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | try { | ||
+ | System.out.println(" | ||
+ | Class.forName(" | ||
+ | |||
+ | Connection conexion = null; | ||
+ | connexion = DriverManager.getConnection(" | ||
+ | System.out.println(" | ||
+ | |||
+ | // Aqui se podría realizar cualquier operación sobre la | ||
+ | // Base de Datos (INSERT, UPDATE, DELETE, SELECT) | ||
+ | |||
+ | if (connexion!= null) | ||
+ | connexion.close(); | ||
+ | System.out.println(" | ||
+ | } catch (ClassNotFoundException cnfe) { | ||
+ | System.out.println(" | ||
+ | cnfe.printStackTrace(); | ||
+ | } catch (SQLException sqle) { | ||
+ | System.out.println(" | ||
+ | sqle.printStackTrace(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== PreparedStatement ===== | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | // Se solicitan los datos al usuario | ||
+ | String nombre = . . .; | ||
+ | float precio = . . .; | ||
+ | . . . | ||
+ | // Se introducen en la Base de datos | ||
+ | sql = " | ||
+ | PreparedStatement sentencia = conexion.prepareStatement(sql); | ||
+ | sentencia.setString(1, | ||
+ | sentencia.setFloat(2, | ||
+ | sentencia.executeUpdate(); | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ==== Registro de información ==== | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | // Se solicitan los datos al usuario | ||
+ | String nombre = . . .; | ||
+ | float precio = . . .; | ||
+ | . . . | ||
+ | // Se introducen en la Base de datos | ||
+ | sql = " | ||
+ | PreparedStatement sentencia = conexion.prepareStatement(sql); | ||
+ | sentencia.setString(1, | ||
+ | sentencia.setFloat(2, | ||
+ | // Devuelve el número de filas registradas | ||
+ | int filasAfectadas = sentencia.executeUpdate(); | ||
+ | sentencia.close(); | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ==== Modificar información ==== | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | // Se solicitan los datos al usuario | ||
+ | String nombre = . . .; | ||
+ | float nuevoPrecio = . . .; | ||
+ | . . . | ||
+ | // Se modifica el campo del producto seleccionado | ||
+ | sql = " | ||
+ | PreparedStatement sentencia = conexion.prepareStatement(sql); | ||
+ | sentencia.setFloat(1, | ||
+ | sentencia.setString(2, | ||
+ | // Devuelve el número de filas modificadas | ||
+ | int filasAfectadas = sentencia.executeUpdate(); | ||
+ | sentencia.close(); | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ==== Eliminar información ==== | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | // Se solicitan los datos al usuario | ||
+ | String nombre = . . .; | ||
+ | . . . | ||
+ | // Se eliminan los productos que cumplen la condición | ||
+ | sql = " | ||
+ | PreparedStatement sentencia = conexion.prepareStatement(sql); | ||
+ | sentencia.setInt(1, | ||
+ | // Devuelve el número de filas eliminadas | ||
+ | int filasAfectadas = sentencia.executeUpdate(); | ||
+ | sentencia.close(); | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ==== Consulta de información ==== | ||
+ | |||
+ | <code java> | ||
+ | . . . | ||
+ | sql = " | ||
+ | PreparedStatement sentencia = conexion.prepareStatement(sql); | ||
+ | // Devuelve un cursor con todas las filas | ||
+ | ResultSet resultado = sentencia.executeQuery(); | ||
+ | // Se recorren todas las filas una a una | ||
+ | while (resultado.next()) { | ||
+ | String nombre = resultado.getString(1); | ||
+ | float precio = resultado.getFloat(2); | ||
+ | System.out.println(" | ||
+ | } | ||
+ | sentencia.close(); | ||
+ | . . . | ||
+ | </ | ||
+ | |||
+ | ===== Creación del CRUD ===== | ||
+ | |||
+ | El acrónimo [[https:// | ||
+ | |||
+ | En este caso, consistiría en preparar una aplicación en la que se mostrara al usuario un menú para que pudiera llevar a cabo las 4 operaciones que hemos visto sobre un conjunto de datos. | ||
---- | ---- | ||
- | (c) 2019 Santiago Faci | + | (c) 2019-{{date> |
apuntes/bbdd.1549832044.txt.gz · Last modified: 2019/02/10 20:54 by Santiago Faci