Herramientas de usuario

Herramientas del sitio


apuntes:jdbc

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
apuntes:jdbc [2018/12/14 19:43] – [Funciones almacenadas] fernandoapuntes:jdbc [2024/09/16 16:03] (actual) – editor externo 127.0.0.1
Línea 6: Línea 6:
  
 Ya que, como hemos dicho, el driver es lo único que depende exclusivamente del SGBD utilizado, es muy sencillo escribir aplicaciones cuyo código se pueda reutilizar si más adelante tenemos que cambiar de motor de Base de Datos o bien si queremos permitir que dicha aplicación pueda conectarse a más de un SGBD de forma que el usuario no tenga porque comprometerse a un SGBD concreto si la adquiere o quiere ponerla en marcha. Ya que, como hemos dicho, el driver es lo único que depende exclusivamente del SGBD utilizado, es muy sencillo escribir aplicaciones cuyo código se pueda reutilizar si más adelante tenemos que cambiar de motor de Base de Datos o bien si queremos permitir que dicha aplicación pueda conectarse a más de un SGBD de forma que el usuario no tenga porque comprometerse a un SGBD concreto si la adquiere o quiere ponerla en marcha.
 +
 ===== Operaciones básicas con JDBC ===== ===== Operaciones básicas con JDBC =====
  
Línea 80: Línea 81:
 === Conectarse a un SGBD sin seleccionar una bbdd === === Conectarse a un SGBD sin seleccionar una bbdd ===
 Cuando queremos conectarnos a un SGBD para posteriormente seleccionar la base de datos que queremos consultar, podemos hacerlo del siguiente modo: Cuando queremos conectarnos a un SGBD para posteriormente seleccionar la base de datos que queremos consultar, podemos hacerlo del siguiente modo:
 +
 <code java> <code java>
 . . . . . .
-Connection conexion = null;+//Me conecto a MySql sin indicar ninguna tabla
  
-conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/", +Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/", 
            "usuario", "password");            "usuario", "password");
  
Línea 90: Línea 92:
 ResultSet catalogo = conexion.getMetaData().getCatalogs(); ResultSet catalogo = conexion.getMetaData().getCatalogs();
  
-//Accedo a las bases de datos que existen en ese SGBD+//Muestro los nombres de las bases de datos que existen en ese SGBD
 while (catalogo.next()) { while (catalogo.next()) {
    System.out.println(catalogo.getString(1));    System.out.println(catalogo.getString(1));
Línea 97: Línea 99:
  
 //Cuando sepa a qué base de datos conectarme //Cuando sepa a qué base de datos conectarme
-conexion.setCatalog("baseDeDatos");+conexion.setCatalog("nombreBaseDeDatos");
  
 </code> </code>
  
-==== Insertar datos ====+===== Consultas sobre la base de datos====
 +Para ejecutar una consulta (INSERT, UPDATE, DELETE o SELECT) emplearemos un objeto de tipo ''PreparedStatement''. Este objeto será creado mediante el método ''prepareStatement(consulta)'' de la clase ''Connection'', que recibe un String con la consulta SQL. Además, el objeto PreparedStatement se puede crear a partir de una consulta parametrizada ('?'). Podemos dar valor a esos parámetros posteriormente.
  
 +==== Insertar datos en la base de datos ====
 +Ejecutaremos una consulta de tipo INSERT:
 <code java> <code java>
 . . . . . .
Línea 125: Línea 130:
 . . . . . .
 </code> </code>
-==== Modificar datos ====+ 
 +==== Modificar datos de la base de datos====
  
 <code java> <code java>
Línea 151: Línea 157:
 . . . . . .
 </code> </code>
 +
 ==== Eliminar datos ==== ==== Eliminar datos ====
  
Línea 179: Línea 186:
 ==== Consultas de Seleccion==== ==== Consultas de Seleccion====
  
-Una consulta de selección sobre una tabla de la base de datos devuelve un conjunto de datos organizados en filas y columnas (registros). En Java almacenamos esa información mediante el objeto //ResultSet// el cual tiene filas y columnas.+Una consulta de selección sobre una tabla de la base de datos devuelve un conjunto de datos organizados en filas y columnas (registros). En Java almacenamos esa información mediante un objeto de la clase ''ResultSet'', el cual está formado por filas y columnas.
  
-Un ''ResultSet'' solo puede recorrerse fila por fila, desde la primera hasta la última en una única dirección (''next()''). Además, podemos acceder a cualquier columna de cada fila mediante algunos de sus métodos (''getInt()'', ''getString()'', ''getObject()'', etc). Las columnas se numeran empezando en el nº **1**.+Un ''ResultSet'' solo puede recorrerse fila por fila, desde la primera hasta la última en una única dirección deon su método ''next()''. Además, podemos acceder a cualquier columna de cada fila mediante algunos de sus métodos (''getInt()'', ''getString()'', ''getObject()'', etc). Las columnas se numeran empezando en el nº **1**.
  
 <code java> <code java>
Línea 241: Línea 248:
 </code> </code>
  
-En el caso de las funciones agregadas, podremos tener en cuenta que sólo van a devolver un valor, por lo que no será necesario preparar el código para recorrer el cursor. Podremos acceder directamente a la primera fila del //ResultSet// y mostrar el resultado, tal y como se muestra en el siguiente ejemplo:+En el caso de las funciones agregadas de SQL (COUNT(), AVG(), MAX(), SUM(), MIN(), etc), podremos tener en cuenta que sólo van a devolver un valor, por lo que no será necesario preparar el código para recorrer el cursor. Podremos acceder directamente a la primera fila del //ResultSet// y mostrar el resultado, tal y como se muestra en el siguiente ejemplo:
  
 <code java> <code java>
Línea 337: Línea 344:
 END procedimiento; || END procedimiento; ||
 DELIMITER ; DELIMITER ;
 +
 +CALL nueva_pista('4255-GSF', 'tenis', 2.45, 'Las Rozas'); -- LLamo al procedimiento
 </code> </code>
  
Línea 342: Línea 351:
 . . . . . .
 //Método para eliminar todos los productos //Método para eliminar todos los productos
 +
 String sentenciaSql = "call eliminar_todos_los_productos()"; String sentenciaSql = "call eliminar_todos_los_productos()";
 CallableStatement procedimiento = null; CallableStatement procedimiento = null;
Línea 374: Línea 384:
 ==== Funciones almacenadas ==== ==== Funciones almacenadas ====
  
-En el caso de las funciones almacenadas, para su ejecución seguiremos la misma estructura que hemos visto en el caso de las consultas SQL para el caso concreto de las funciones agregadas, ya que nuestras funciones nos devolverán siempre un solo valor (o null en el caso de que no devuelvan nada).+En el caso de la ejecución de las funciones almacenadas, seguiremos la misma estructura que con las funciones de agregación de SQL (COUNT(), SUM(), AVG()), ya que nuestras funciones nos devolverán siempre un solo valor (o null en el caso de que no devuelvan nada).
  
  
-<code java>+<code sql> 
 + 
 +-- Función que devuelve el número de reservas que ha realizado un usuario determinado 
 DELIMITER || DELIMITER ||
--- Función que devuelva el número de reservas que ha realizado un usuario determinado 
 CREATE FUNCTION get_numero_reservas(p_id_usuario INT) CREATE FUNCTION get_numero_reservas(p_id_usuario INT)
 RETURNS INT RETURNS INT
Línea 400: Línea 412:
 END; || END; ||
 DELIMITER ; DELIMITER ;
 +
 +SELECT get_numero_reservas(3); -- Muestro la cantidad de reservas del usuario con id = 3
 </code> </code>
  
apuntes/jdbc.1544816600.txt.gz · Última modificación: 2024/09/16 16:05 (editor externo)