Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:bbdd

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:bbdd [2019/02/16 19:29] Santiago Faciapuntes:bbdd [2023/05/28 12:04] (current) – [Creación del CRUD] Santiago Faci
Line 9: Line 9:
 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://sqlitebrowser.org|SQLiteBrowser]] que nos permitirá, de una forma visual, crear dichas estructuras. 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://sqlitebrowser.org|SQLiteBrowser]] que nos permitirá, de una forma visual, crear dichas estructuras.
  
-===== Registrar información =====+==== Registrar información ====
  
 La sentencia de inserción ''INSERT'' permite registrar nueva información en la base de datos. Se puede utilizar para registrar una o varias filas de datos en una sola ejecución. La sentencia de inserción ''INSERT'' permite registrar nueva información en la base de datos. Se puede utilizar para registrar una o varias filas de datos en una sola ejecución.
Line 31: Line 31:
 </code> </code>
  
-\section{Modificar información}+==== Modificar información ====
  
-La sentencia para modificar datos \verb UPDATE  permite modificar uno o varios campos de una o varias filas en una sola ejecución, siempre +La sentencia para modificar datos ''UPDATE'' permite modificar uno o varios campos de una o varias filas en una sola ejecución, siempre dependiendo de los campos que se indiquen en la claúsula ''SET'' y las condiciones en la claúsula ''WHERE''. Las primeras indican los valores que serán asignados a una serie de columnas y las segundas indicarán las condiciones que cumplen las filas que se van a modificar.
-dependiendo de los campos que se indiquen en la claúsula \verb SET  y las condiciones en la claúsula \verb WHERE  . Las primeras indican los +
-valores que serán asignados a una serie de columnas y las segundas indicarán las condiciones que cumplen las filas que se van a modificar.+
  
-Hay que tener en cuenta que la claúsula \verb WHERE  es opcional y que, si no es especifica, la operación de modificación afectará a todas +Hay que tener en cuenta que la claúsula ''WHERE'' es opcional y que, si no es especifica, la operación de modificación afectará a todas las filas de la tabla.
-las filas de la tabla.+
  
-\begin{lstlisting}[language=sql]+<code sql>
 UPDATE nombre_tabla UPDATE nombre_tabla
 SET columna = valor [ {, columna = valor} ] SET columna = valor [ {, columna = valor} ]
 [ WHERE condiciones ] [ WHERE condiciones ]
-\end{lstlisting}+</code>
  
-Así, en el siguiente ejemplo, si no se especificará en la claúsula \verb WHERE  el producto al que se quiere subir el precio, se subiría el +Así, en el siguiente ejemplo, si no se especificará en la claúsula ''WHERE'' el producto al que se quiere subir el precio, se subiría el precio a todos los productos registrados en la Base de Datos.
-precio a todos los productos registrados en la Base de Datos.+
  
 Veamos algunos ejemplos: Veamos algunos ejemplos:
  
-Modifica el precio de un producto para aumentarlo +=== Modifica el precio de un producto para aumentarlo === 
-\begin{lstlisting}[language=sql]+<code sql>
 UPDATE productos UPDATE productos
 SET precio = precio + 10 SET precio = precio + 10
 WHERE nombre = 'Galletas' WHERE nombre = 'Galletas'
-\end{lstlisting}+</code>
  
-Modifica directamente el precio sobrescribiéndolo +=== Modifica directamente el precio sobrescribiéndolo === 
-\begin{lstlisting}[language=sql]+<code sql>
 UPDATE productos UPDATE productos
 SET precio = 4.5 SET precio = 4.5
 WHERE nombre = 'Galletas' WHERE nombre = 'Galletas'
-\end{lstlisting}+</code>
  
-Modifica el precio de varios productos +=== Modifica el precio de varios productos === 
-\begin{lstlisting}[language=sql]+<code sql>
 UPDATE productos UPDATE productos
 SET precio = precio * 1.25 SET precio = precio * 1.25
 WHERE precio BETWEEN 1 AND 5 WHERE precio BETWEEN 1 AND 5
-\end{lstlisting}+</code>
  
-\section{Eliminar información}+==== Eliminar información ====
  
-La sentencia para eliminar información \verb DELETE  permite eliminar filas completas de la tabla.+La sentencia para eliminar información ''DELETE'' permite eliminar filas completas de la tabla.
  
-Hay que tener en cuenta que, de forma similar a como ocurre con la sentencia \verb UPDATE , la claúsula \verb WHERE  es opcional. En este +Hay que tener en cuenta que, de forma similar a como ocurre con la sentencia ''UPDATE'', la claúsula ''WHERE''  es opcional. En este caso, si no se especifica, una sentencia ''DELETE'' eliminará todas las filas de una tabla.
-caso, si no se especifica, una sentencia \verb DELETE  eliminará todas las filas de una tabla.+
  
-\begin{lstlisting}[language=sql]+<code sql>
 DELETE FROM nombre_tabla DELETE FROM nombre_tabla
 [ WHERE condiciones ] [ WHERE condiciones ]
-\end{lstlisting}+</code>
  
 Veamos algunos ejemplos: Veamos algunos ejemplos:
  
-Elimina el producto que se llama 'Galletas' +=== Elimina el producto que se llama 'Galletas' === 
-\begin{lstlisting}[language=sql]+<code sql>
 DELETE FROM productos DELETE FROM productos
 WHERE nombre = 'Galletas' WHERE nombre = 'Galletas'
-\end{lstlisting}+</code>
  
-Elimina los productos cuyo precio es menor que 10 +=== Elimina los productos cuyo precio es menor que 10 === 
-\begin{lstlisting}[language=sql]+<code sql>
 DELETE FROM productos DELETE FROM productos
 WHERE precio < 10 WHERE precio < 10
-\end{lstlisting}+</code>
  
-Elimina los productos 'Galletas' y 'Aceite' +=== Elimina los productos 'Galletas' y 'Aceite' === 
-\begin{lstlisting}[language=sql]+<code sql>
 DELETE FROM productos DELETE FROM productos
 WHERE nombre = 'Galletas' OR nombre = 'Aceite' WHERE nombre = 'Galletas' OR nombre = 'Aceite'
-\end{lstlisting}+</code>
  
-Elimina todos los productos +=== Elimina todos los productos === 
-\begin{lstlisting}[language=sql]+<code sql>
 DELETE FROM productos DELETE FROM productos
-\end{lstlisting} +</code>
  
-\section{Consultar/Visualizar información}+==== Consultar/Visualizar información ====
  
-La sentencia más compleja y utilizada es \verb SELECT  puesto que es la instrucción que permite visualizar la información de la Base de +La sentencia más compleja y utilizada es ''SELECT'' puesto que es la instrucción que permite visualizar la información de la Base de Datos, combinándola de todas las formas posibles con otros registros de otras tablas para extraer la información y poder aprovecharla lo máximo posible.
-Datos, combinándola de todas las formas posibles con otros registros de otras tablas para extraer la información y poder aprovecharla lo +
-máximo posible.+
  
-Veremos una versión reducida de dicha sentencia, donde podremos especificar que campos visualizar con la claúsula \verb SELECT , y con las +Veremos una versión reducida de dicha sentencia, donde podremos especificar que campos visualizar con la claúsula ''SELECT'', y con las claúsulas ''WHERE'' ''ORDER'' podremos indicar qué filas queremos ver y cómo ordenarlas al visualizarlas en pantalla.
-claúsulas \verb WHERE  \verb ORDER  podremos indicar qué filas queremos ver y cómo ordenarlas al visualizarlas en pantalla.+
  
-Al igual que ocurre con \verb UPDATE  \verb DELETE , la claúsula \verb WHERE  es opcional. En caso de que no se especifique, se +Al igual que ocurre con ''UPDATE'' ''DELETE'', la claúsula ''WHERE'' es opcional. En caso de que no se especifique, se visualizarán todas las filas de la tabla (mostrándose solamente los campos especificados con la claúsula ''SELECT'').
-visualizarán todas las filas de la tabla (mostrándose solamente los campos especificados con la claúsula \verb SELECT ).+
  
-\begin{lstlisting}[language=sql]+<code sql>
 SELECT columnas SELECT columnas
 FROM tablas FROM tablas
 [ WHERE condiciones ] [ WHERE condiciones ]
 [ ORDER BY columnas_a_ordenar [ASC|DESC] ] [ ORDER BY columnas_a_ordenar [ASC|DESC] ]
-\end{lstlisting}+</code>
  
 Veamos algunos ejemplos: 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 +=== 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 === 
-en orden ascendente +<code sql>
-\begin{lstlisting}[language=sql]+
 SELECT nombre, precio SELECT nombre, precio
 FROM productos FROM productos
 WHERE precio > 5 WHERE precio > 5
 ORDER BY nombre ASC ORDER BY nombre ASC
-\end{lstlisting}+</code>
  
-Muestra el nombre de todos los productos. Muestra los resultados en el orden en que se hayan insertado en la tabla +=== Muestra el nombre de todos los productos. Muestra los resultados en el orden en que se hayan insertado en la tabla === 
-\begin{lstlisting}[language=sql]+<code sql>
 SELECT nombre SELECT nombre
 FROM productos FROM productos
-\end{lstlisting}+</code>
  
-Muestra el nombre y precio de los productos 'Galletas' y que el precio sea de 10 euros +=== Muestra el nombre y precio de los productos 'Galletas' y que el precio sea de 10 euros === 
-\begin{lstlisting}[language=sql]+<code sql>
 SELECT nombre, precio SELECT nombre, precio
 FROM productos FROM productos
 WHERE precio = 10 AND nombre = 'Galletas' WHERE precio = 10 AND nombre = 'Galletas'
-\end{lstlisting}+</code>
  
-Muestra todos los campos de todos los productos +=== Muestra todos los campos de todos los productos === 
-\begin{lstlisting}[language=sql]+<code sql>
 SELECT * SELECT *
 FROM productos FROM productos
-\end{lstlisting}+</code>
  
-\section{Acceso a una base de datos desde Java y JDBC}+===== 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 +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.
-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 +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//.
-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 \emph{SQLite}, que es un SGBD Relacional muy ligero, utilizando en pequeñas aplicaciones (y también +En nuestro caso, vamos a trabajar con [[https://www.sqlite.org/index.html|SQLite]], que es un SGBD Relacional muy ligero, utilizando en pequeñas aplicaciones (y también presente, de serie, en todos los terminales Android para dar soporte de base de datos a sus aplicaciones y a las desarrolladas por otros). No es un SGBD de alto rendimiento pero es más que suficiente para realizar aplicaciones con Bases de Datos de unos cuantos cientos de MB.
-presente, de serie, en todos los terminales Android para dar soporte de base de datos a sus aplicaciones y a las desarrolladas por otros). +
-No es un SGBD de alto rendimiento pero es más que suficiente para realizar aplicaciones con Bases de Datos de unos cuantos cientos de MB.+
  
-Para comenzar a trabajar con SQLite, lo primero es descargar el driver de \url{https://bitbucket.org/xerial/sqlite-jdbc/downloads/e +Para comenzar a trabajar con SQLite, lo primero es descargar el [[https://github.com/xerial/sqlite-jdbc|driver JDBC para SQLite]] e incluirlo al proyecto con ayuda del IDE. Lo añadiremos al //Classpath// para que Java pueda utilizar las clases implementadas en él cuando nos conectemos y comuniquemos con la Base de Datos. De forma muy similar a como hace nuestro Sistema Operativo para comunicarse con los periféricos utilizando los Drivers.
-incluirlo al proyecto con ayuda del IDE. Lo incluiremos al \emph{Classpathpara que Java pueda utilizar las clases implementadas en él +
-cuando nos conectemos y comuniquemos con la Base de Datos. De forma muy similar a como hace nuestro Sistema Operativo para comunicarse con +
-los periféricos utilizando los Drivers.+
  
-\subsection{Conectar con una base de datos SQLite y registrar datos}+==== Conectar con una base de datos SQLite y registrar datos ====
  
-Para conectar con una Base de Datos, en este caso de \emph{SQLite}, sólo hay que cargar el driver e indicar la ubicación de la misma.+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 +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 ''conexion'', que servirá como enlace entre la aplicación y la Base de Datos con ayuda del objeto ''PreparedStatement'' que veremos a continuación.
-conexión queda establecida sobre el objecto \verb conexion , que servirá como enlace entre la aplicación y la Base de Datos con ayuda del +
-objeto \verb PreparedStatement  que veremos a continuación.+
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 try { try {
Line 207: Line 187:
     sqle.printStackTrace();     sqle.printStackTrace();
 } }
-\end{lstlisting}+</code>
  
-\section{PreparedStatement}+===== PreparedStatement =====
  
-\verb PreparedStatement  es la clase Java de la API de JDBC que se utiliza para ejecutar cualquier sentencia SQL sobre una Base de Datos. Se +''PreparedStatement'' es la clase Java de la API de JDBC que se utiliza para ejecutar cualquier sentencia SQL sobre una Base de Datos. Se encarga de ejecutar el código SQL sobre la conexión establecida y de obtener los resultados de dicha ejecución, si son necesarios.
-encarga de ejecutar el código SQL sobre la conexión establecida y de obtener los resultados de dicha ejecución, si son necesarios.+
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 // Se solicitan los datos al usuario // Se solicitan los datos al usuario
Line 227: Line 206:
 sentencia.executeUpdate(); sentencia.executeUpdate();
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Registro de información}+==== Registro de información ====
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 // Se solicitan los datos al usuario // Se solicitan los datos al usuario
Line 246: Line 225:
 sentencia.close(); sentencia.close();
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Modificar información}+==== Modificar información ====
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 // Se solicitan los datos al usuario // Se solicitan los datos al usuario
Line 265: Line 244:
 sentencia.close(); sentencia.close();
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Eliminar información}+==== Eliminar información ====
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 // Se solicitan los datos al usuario // Se solicitan los datos al usuario
Line 282: Line 261:
 sentencia.close(); sentencia.close();
 . . . . . .
-\end{lstlisting}+</code>
  
-\subsection{Consulta de información}+==== Consulta de información ====
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 sql = "SELECT nombre, precio FROM productos"; sql = "SELECT nombre, precio FROM productos";
Line 300: Line 279:
 sentencia.close(); sentencia.close();
 . . . . . .
-\end{lstlisting} +</code>
- +
-\section{Creación del CRUD}+
  
-El acrónimo CRUD (Create, Read, Update, Delete) es un acrónimo que hace referencia a las 4 operaciones que se pueden hacer para gestionar +===== Creación del CRUD =====
-datos en una base de datos (INSERT, SELECT, UPDATE, DELETE). Es un acrónimo muy utilizado para hacer referencia a la operativa básica de una +
-aplicación de gestión que opera sobre una Base de Datos y realiza esas 4 operaciones sobre los datos que gestiona.+
  
-En este casoconsistiría en preparar una aplicación en la que se mostrara al usuario un menú para que pudiera llevar cabo las 4 +El acrónimo [[https://es.wikipedia.org/wiki/CRUD|CRUD]] (CreateRead, Update, Delete) es un acrónimo que hace referencia a las 4 operaciones que se pueden hacer para gestionar datos en una base de datos (''INSERT'', ''SELECT'', ''UPDATE'', ''DELETE''). Es un acrónimo muy utilizado para hacer referencia a la operativa básica de una aplicación de gestión que opera sobre una Base de Datos y realiza esas 4 operaciones sobre los datos que gestiona.
-operaciones que hemos visto sobre un conjunto de datos.+
  
 +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>%Y}} Santiago Faci
apuntes/bbdd.1550345361.txt.gz · Last modified: 2019/02/16 19:29 by Santiago Faci