Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla real una vista consta de un conjunto de columnas y filas de datos con nombre. Sin embargo, debe quedar bien claro de que una Vista «no almacena datos», las filas y columnas de datos proceden de tablas a las cuales se hace referencia en la consulta que se define desde la vista .
Una Vista al ser una tabla más de la base de datos, puede ser utilizada como cualquier otra tabla (con pequeñas diferencias claro) desde java o desde el lenguaje que estemos utilizando (ASPX, VB, C++, Delphi, PHP, etc), una vista puede utilizarse por ejemplo para:
Podemos decir mucho más sobre las Vista, sin embargo yo me canso en escribir y usted se cansa en leer, si llego a este sitio, es porque lo que usted está buscando son ejemplos prácticos, y ejemplos prácticos es lo que tendra, solo nos detendremos a escribir las partes más relevantes para nuestro ejemplo.
¿Que necesita saber?
Crear una Vista (CREATE VIEW).
Para crear una vista se utiliza el comando
CREATE VIEW <Nombre de la Vista> AS <Instrucción SELECT atributos físicos de una o varias tablas>
Instruccion de selección (SELECT).
En la instrucción SELECT quee define la vista se puede utilizar más de una tabla e incluso otras vistas. Sin embargo, hay que tener en cuenta algunas restricciones de las cláusulas SELECT en una definición de una vista, no se puede:
Comencemos con la práctica 🙂
Utilizaremos una pequeña base de datos compuesta por tres tablas, Universitario, Materia y la relación muchos a muchos entre estas dos tablas, el MER es el siguiente:
La tabla UNIVERSITARIO esta formada de la siguiente manera:
-- -- Estructura de tabla para la tabla 'universitario' -- CREATE TABLE universitario ( u_carnet varchar(7) NOT NULL, u_nombre varchar(60) NOT NULL, PRIMARY KEY (u_carnet) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Volcar la base de datos para la tabla 'universitario' -- INSERT INTO universitario VALUES ('333-123', 'Al K. Huete '); INSERT INTO universitario VALUES ('345-232', 'Aldo Lorido '); INSERT INTO universitario VALUES ('555-667', 'Alejandro Gado '); INSERT INTO universitario VALUES ('323-111', 'Alex Cremento '); INSERT INTO universitario VALUES ('321-236', 'Armando Esteban Quito '); INSERT INTO universitario VALUES ('555-349', 'Helen Chufe '); INSERT INTO universitario VALUES ('098-332', 'Monica Galindo '); INSERT INTO universitario VALUES ('998-002', 'Viviana K. Lavuelta '); INSERT INTO universitario VALUES ('009-332', 'Lali Cuadora '); INSERT INTO universitario VALUES ('911-212', 'Federico Chino ');
La tabla MATERIA con algunos datos es la siguiente:
-- -- Estructura de tabla para la tabla 'materia' -- CREATE TABLE materia ( m_sigla varchar(6) NOT NULL, m_nombre varchar(60) NOT NULL, PRIMARY KEY (m_sigla) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Volcar la base de datos para la tabla 'materia' -- INSERT INTO materia VALUES ('SIS102', 'Base de Datos I'); INSERT INTO materia VALUES ('SIS420', 'Inteligencia Artificial'); INSERT INTO materia VALUES ('SIS100', 'Ensamblador');
La relación entre ambas tablas UNIVERSITARIO y MATERIA forma una tabla intermedia que llamremos UM, su estructura es:
-- -- Estructura de tabla para la tabla 'um' -- CREATE TABLE um ( cu varchar(7) default NULL, sigla varchar(6) default NULL, examen1 float default NULL, examen2 float default NULL, KEY cu (cu), KEY sigla (sigla) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Volcar la base de datos para la tabla 'um' -- INSERT INTO um VALUES ('333-123', 'SIS102', 46, 23); INSERT INTO um VALUES ('333-123', 'SIS420', 56, 49); INSERT INTO um VALUES ('345-232', 'SIS100', 33, 12); INSERT INTO um VALUES ('345-232', 'SIS420', 89, 44); INSERT INTO um VALUES ('555-667', 'SIS420', 55, 45); INSERT INTO um VALUES ('555-667', 'SIS120', 45, 66); INSERT INTO um VALUES ('323-111', 'SIS100', 55, 65); INSERT INTO um VALUES ('323-111', 'SIS120', 66, 77); INSERT INTO um VALUES ('321-236', 'SIS100', 78, 87); INSERT INTO um VALUES ('321-236', 'SIS120', 87, 10); INSERT INTO um VALUES ('555-349', 'SIS100', 34, 87); INSERT INTO um VALUES ('555-349', 'SIS420', 77, 77); INSERT INTO um VALUES ('098-332', 'SIS100', 45, 65); INSERT INTO um VALUES ('998-002', 'SIS120', 23, 32); INSERT INTO um VALUES ('009-332', 'SIS420', 33, 54); INSERT INTO um VALUES ('009-332', 'SIS120', 34, 55); INSERT INTO um VALUES ('911-212', 'SIS100', 44, 55); INSERT INTO um VALUES ('911-212', 'SIS420', 34, 54);
Creo que el sentido de esta base de datos se entiende verdad, un universitario pueden llevar muchas materias y una materia puede ser llevada por muchas universitarios, ademas se necesita almacenar las calificaciones del primer y segundo examen para cada alumno.
¿Que se desea conocer?
Se desea conocer la lista de los alumnos aprobados con nota mayor de 51 de la asignatura de SIS-420 «Inteligencia Artificial», esta consulta podemos resolverla de la siguiente manera:
SELECT * FROM ( SELECT u_carnet AS CU, u_nombre AS Nombre, examen1 AS Nota1 , examen2 AS Nota2, SUM(examen1+examen2)/2 AS NotaFinal FROM universitario INNER JOIN um on u_carnet=cu INNER JOIN materia ON sigla=m_sigla WHERE m_sigla='SIS420' GROUP BY u_carnet ) AS tmp WHERE NotaFinal > 51
Tenemos una subconsulta de donde obtenemos la lista de notas de todos los alumnos de la asignatura de sis420, de esta subconsulta haciendo uso de la condición del problema (nota minima de aprobación > 51), obtenemos la lista de aprobados, es decir, con la 1ra consulta tenemos:
CU | Nombre | Nota1 | Nota2 | NotaFinal 009-332 Lali Cuadora 33 54 43.5 333-123 Al K. Huete 56 49 52.5 345-232 Aldo Lorido 89 44 66.5 555-349 Helen Chufe 77 77 77 555-667 Alejandro Gado 55 45 50 911-212 Federico Chino 34 54 44
y despues añadiendo la condicion Nota Final Aprobados > 51
CU | Nombre | Nota1 | Nota2 | NotaFinal 333-123 Al K. Huete 56 49 52.5 345-232 Aldo Lorido 89 44 66.5 555-349 Helen Chufe 77 77 77
Esta consulta podemos utilizarla directamente desde Java, sin embargo podemos hacer uso de Tablas Virtuales y llamar esta desde Java como cualquier otra tabla.
Creación de la Tabla Virtual.
Crearemos dos Vistas, ¿porqué dos?, porque estamos utilizando dos select para obtener el resultado, y una Vista no puede generarse haciendo uso de una tabla temporal, esto nos obliga a crear una vista para obtener la «lista de Notas de Alumnos de SIS420» y otra segunda vista que hara uso de la anterior vista para obtener la «Lista de Alumnos Aprobados», manos a la obra:
A la primera vista la llamaremos «notas_IA», el código para crear la vista es:
CREATE VIEW notas_IA AS SELECT u_carnet AS CU, u_nombre AS Nombre, examen1 AS Nota1 , examen2 AS Nota2, SUM(examen1+examen2)/2 AS NotaFinal FROM universitario INNER JOIN um on u_carnet=cu INNER JOIN materia ON sigla=m_sigla WHERE m_sigla='SIS420' GROUP BY u_carnet
La segunda vista se llamara: «aprobados__IA» y es:
CREATE VIEW aprobados_IA AS SELECT * FROM notas_IA WHERE NotaFinal > 51
Si te salio algún error en la creación de las tablas o de las Vistas, revisa el tuto desde el principio, eso es todo con SQL, ahora debemos hacer uso de esta Tabla Virtual desde java, esto no es nada del otro mundo, como ya dijimos una Vista no es más que una tabla virtual por tanto su utilización es igual a cualquier otra tabla, vamos programar en java
Java Netbeans
Crea un nuevo proyecto Java Netbeans (Nombre Proyecto: jcview) , y añade ademas del main que crea por defecto, añade una clase a la que llamaras «database.java», nuestra clase de conexion a MySQL, este proyecto no hara uso de una interfaz grafica ya que no es relevante para este tutorial, no te olvides de agregar la libreria de conexión «Driver MySQL JDBC mysql-connector», yo utilizo la versión 5.1.6, creo que es la ultima versión.
El codigo de la clase «database.java» es el siguiente:
package jcview; import java.sql.*; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class database { /* DATOS PARA LA CONEXION */ private String bd = "NOMBRE_BASE_DE_DATOS"; private String login = "USUARIO"; private String password = "PASSWORD_MYSQL"; private String url = "jdbc:mysql://localhost/"+bd; private Connection conn = null; //___________________________________________________________________________________ Soy una barra separadora 🙂 public database(){ try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); if (conn!=null){ //System.out.println("OK base de datos "+bd+" listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } //___________________________________________________________________________________ Soy una barra separadora 🙂 /* METODO PARA REALIZAR UNA CONSULTA A LA BASE DE DATOS * INPUT: * table => nombre de la tabla donde se realizara la consulta, puede utilizarse tambien INNER JOIN * fields => String con los nombres de los campos a devolver Ej.: campo1,campo2campo_n * where => condicion para la consulta * OUTPUT: un object[][] con los datos resultantes, sino retorna NULL */ public Object [][] select(String table, String fields, String where){ int registros = 0; String colname[] = fields.split(","); //Consultas SQL String q ="SELECT " + fields + " FROM " + table; String q2 = "SELECT count(*) as total FROM " + table; if(where!=null) { q+= " WHERE " + where; q2+= " WHERE " + where; } //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = conn.prepareStatement(q2); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } //se crea una matriz con tantas filas y columnas que necesite Object[][] data = new String[registros][fields.split(",").length]; //realizamos la consulta sql y llenamos los datos en la matriz "Object" try{ PreparedStatement pstm = conn.prepareStatement(q); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ for(int j=0; j<=fields.split(",").length-1;j++){ data[i][j] = res.getString( colname[j].trim() ); } i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } //___________________________________________________________________________________ Soy una barra separadora 🙂 }
Esta clase nos permite conectarnos a MySQL, ademas cuenta un método para realizar una consulta. No te olvides rellenar tus datos de MySQL, usuario, password y nombre de la base de datos.
Implementamos esta clase en el main del proyecto de la siguiente forma:
package jcview; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class Main { static database db = new database(); static Object[][] data; public static void main(String[] args) { //se realiza la consulta a la VISTA como a cualquier otra tabla data = db.select("aprobados_ia", " CU, Nombre, Nota1, Nota2, NotaFinal ", null); System.out.println(" C.U. | Nombre | N1 | N2 | Nota Final "); if( data.length > 0) //Se imprimen los datos devueltos for(int i=0; i<data.length;i++) { System.out.println( data[i][0].toString() + " | " + data[i][1].toString() + " | " + data[i][2].toString() + " | " + data[i][3].toString() + " | " + data[i][4].toString() ); } else System.out.println("No existen datos"); } }
Como puede verse, se llama a la Tabla Virtual, como a cualquier otra tabla, y ademas la consulta que se utiliza es sencilla en comparación a la consulta compleja que se deberia haber implementado de no haber hecho uso de Vistas.
No queda mas que mostrar el resultado en pantalla.
Si deseas bajarte el proyecto completo, dale clic al siguiente enlace «Descargar» 🙂
FIN
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
En este post veremos como imprimir secciones de un formulario en java implementando la Interface Printable. La clase que...
Google abre las puertas de Google Open Source un nuevo sitio web que une todos sus proyectos de «Código Abierto» que ha...
Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores «rojo», «verde», «salm...
EL 6 de agosto de cada año se recuerda una de las fechas más importantes de la historia boliviana, porque el 6 de Agosto...
En este tutorial crearemos una aplicación sencilla para activar y desactivar el bluetooth de nuestros teléfonos intelige...
Netbeans tiene soporte para trabajar con varias herramientas de control de versiones, GIT es una de ellas, esta herramie...
Los comentarios estan cerrados
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
me gustaria que me ayudes con manejo de horas restriccion de horas en java Mysql como por ejemplo para manejo de control de personal
por fabor Att Almanza
ok tomo nota 🙂