Diferencia entre revisiones de «Prog Acceso a base de datos relacionales»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 92: Línea 92:
  
 
</syntaxhighlight>  
 
</syntaxhighlight>  
 +
 +
 +
* Podemos llamar a procedimientos almacenados poniendo como orden a ejecutar '''CALL''' y el nombre del procedimiento, de la siguiente forma:
 +
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
ResultSet resultados = consulta.executeQuery("CALL alumno_listar()");
 +
</syntaxhighlight>
 +
 +
: Siendo '''alumno_listar()''' un procedimiento con el siguiente código:
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
DELIMITER $$
 +
CREATE DEFINER=`root`@`localhost` PROCEDURE `alumno_listar`()
 +
    NO SQL
 +
SELECT nombre,f_nacimiento
 +
FROM alumnos
 +
ORDER BY nombre$$
 +
DELIMITER ;
 +
</syntaxhighlight>
 +
 +
  
 
<br />
 
<br />
 +
 
==Inserción==
 
==Inserción==
  

Revisión del 15:32 24 abr 2018

Introdución


Descargando las librerías para conectar a Mysql

Nota: Estos pasos están probados en un Linux Mint 18 (basado en Ubuntu 16.04) de 64bits.


  • Si descargamos el paquete deb, la librerías necesarias se instalarán el el directorio /usr/share/java. El fichero (en este caso) es mysql-connector-java-8.0.11.jar.
Prog db rel 1.jpg


  • Si queremos desarrollar una aplicación desde NetBeans, debemos de añadir el jar a las librerías del proyecto como vimos en este punto de la wiki.
  • Si queremos ejecutar desde consola la aplicación ya compilada (el class) tendremos que modificar la variable de entorno classpath para añadir el jar, como está indicado en este enlace.


  • La librería descargada, obliga a que el servidor Mysql tenga establecido el huso horario. Podríamos indicarlo en la cadena de conexión desde el cliente java con la siguiente línea:
useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
O bien ejecutar la orden SQL: SET GLOBAL time_zone = '+1:00'



Trabajando contra una base de datos Mysql

  • Lo primero que tenemos que hacer es realizar una conexión a la base de datos.
Entre los datos que vamos a necesitar estarán:
  • Usuario para conectarse a la base de datos con permisos para realizar las operaciones que necesitemos.
  • Password del usuario.
  • Nombre de la base de datos a la que nos vamos a conectar.
  • Nombre del host donde está instalado el servidor Mysql.
  • La cadena de conexión que representa una conexión a un servidor Mysql en JDBC.


  • Veamos un ejemplo de código:
 1         try {
 2             String servidor = "localhost";
 3             String basedatos = "ejemplo";
 4             String user = "root";
 5             String password = "root";
 6             
 7             String husoHorario = "useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
 8 
 9             String conexion = String.format("jdbc:mysql://%s/%s?%s",servidor,basedatos,husoHorario);
10 
11             Connection con = DriverManager.getConnection(conexion,user,password);
12 
13 
14         }  catch (SQLException ex) {
15             Logger.getLogger(ConsultaSimple.class.getName()).log(Level.SEVERE, null, ex);
16         }


  • En versiones anteriores del conector JDBC, era necesario cargar el controlador que representaba la conexión al gestor Mysql con las siguientes instrucciones:
1         try {
2             Class.forName("com.mysql.jdbc.Driver");
3         } catch (ClassNotFoundException e) {
4 
5         }
Ahora ya no es necesario, a parte de que la clase que carga el driver ya no es la anterior, es com.mysql.cj.jdbc.Driver



Consultas

  • Partimos siempre que tenemos definido previamente un objeto de la clase Connection conectado a la base de datos.


  • Veamos un ejemplo:
1             Statement consulta = con.createStatement();
2             ResultSet resultados = consulta.executeQuery("SELECT nombre,f_nacimiento FROM alumnos");
3             while(resultados.next()) {
4                 Date fechaBD = resultados.getDate("f_nacimiento");
5                 String fechaSpain = new SimpleDateFormat("dd-MM-yyyy").format(fechaBD);
6                 System.out.printf("Nombre:%s----F_nac:%s%n",resultados.getString("nombre"),fechaSpain);
7             }


  • Podemos llamar a procedimientos almacenados poniendo como orden a ejecutar CALL y el nombre del procedimiento, de la siguiente forma:
1 ResultSet resultados = consulta.executeQuery("CALL alumno_listar()");
Siendo alumno_listar() un procedimiento con el siguiente código:
1 DELIMITER $$
2 CREATE DEFINER=`root`@`localhost` PROCEDURE `alumno_listar`()
3     NO SQL
4 SELECT nombre,f_nacimiento
5 FROM alumnos
6 ORDER BY nombre$$
7 DELIMITER ;



Inserción

  • Partimos siempre que tenemos definido previamente un objeto de la clase Connection conectado a la base de datos.



Actualización

  • Partimos siempre que tenemos definido previamente un objeto de la clase Connection conectado a la base de datos.



Borrado

  • Partimos siempre que tenemos definido previamente un objeto de la clase Connection conectado a la base de datos.




-- Ángel D. Fernández González -- (2017).