Universidad De Panam�Centro Regional Universitario De Veraguas Licenciatura En Inform 疸 ica Para La Gesti Educativa Y Empresarial
Laboratorio #9 Mysql
PROFESOR Diego Santimateo
INTEGRANTES CONCEPCIÓN JAIRO 9-724-1589 Sánchez
Azurim 9-721-1231
APARICIO YULIAN
9-719-452
Fecha de entrega 12/12/2007
Preguntas 1. Describa qué es una base de datos y un motor (manejador) de base de datos. Una base de datos es un colección de información, que también permite guardar grandes cantidades de datos de forma organizada, para que luego podamos encontrar y utilizar fácilmente, además esta relacionada entre sí.
Un motor de base de Datos es un software, donde se puede administrar muchos datos para llegar a obtener información, es como el corazón de la base de datos ya que se encarga del control total de los posibles aspectos que la puedan afectar entre otras cosas. 2. Describa una tabla y sus componentes. Haga ejemplos de varios registros. Indique cómo están constituidos los registros. Las tablas es donde, se almacena la información y esta compuesta por filas y columnas. Contiene los campos que son los distintos tipos de datos que la componen por ejemplo nombre, apellido, dirección, etc. Ejemplos de Registros: EL registro empleados tiene los siguientes campos: DNI, Nombre, Apellidos, Edad, Población, Sueldo. Los campos DNI, Nombre y Apellidos son elementos o campos característicos. Los restantes son secundarios.
Los registros están constituidos por la información que va contenida en los campos de la tabla, por ejemplo nombre del cliente, el apellido del cliente, dirección del cliente, etc. Es cuando se refiere a una persona en especial.
3. ¿Qué es SQL? SQL (Structured Query Language), es un lenguaje de alto nivel, estándar para manejar las bases de datos está compuesto por comandos, cláusulas, operadores. Además este lenguaje permite trabajar con cualquier tipo de lenguaje (ASP o PHP) en combinación con cualquier tipo de base de datos (MS Access, SQL Server, MySQL.), pero a pesar que es entandar el no es idéntico para cada base de datos. También es muy accesible al aprendizaje. ¿Qué es MYSQL? MySQL es un software creado por MySQL AB y es un software multiusuario, multihilos (soporta una gran carga de forma muy eficiente) y un servidor SQL. Es un sistema de administración de base de datos. 4. Identifique la estructura de los comandos SQL en Mysql para insertar, eliminar, actualizar y consultar registros de una tabla, así como para crear una tabla. Comandos: Insertar: INSERT INTO `Nombre Tabla` (` Nombre Campo ` , ` Nombre Campo ` , `Nombre Campo`) VALUES ('Valor', ' Valor', ' Valor '); Se utiliza para insertar datos en una tabla.
Eliminar: DELETE FROM nombre_tabla WHERE condicion Si se omite la condición where el contenido total de la tabla se borra. Se utiliza para borrar datos de una tabla. Actualizar: UPDATE nombre_base/nombre_tabla SET columna_1 = expresion1, columna_2 = expresion2,… columna_n = expresión WHERE condicion. Se utiliza para actualizar datos en una tabla.
Consultar: Select nos permite hacer una consulta a la base de datos. Statement s = conexion.createStatement(); ResultSet rs = s.executeQuery ("select * from persona"); El Statement obtenido tiene un método executeQuery(). Este método sirve para realizar una consulta a base de datos. Crear una Tabla: CREATE TABLE nombre_tabla (campo1 tipo(longitud), campo2 tipo(longitud), campo_n tipo(longitud)) Se utiliza para crear una tabla. Utilidad de la cláusula WHERE: Para especificar las condiciones que deben reunir los registros que se van a seleccionar. Esta cláusula se utiliza cuando se va ha buscar en la base de datos mySQL , algo especifico. 5. ¿Cuáles son los tipos de los campos y qué significa llave primaria o key? Los tipos de Campos son los siguientes: •Texto: para introducir cadenas de caracteres hasta un máximo de 255 •Memo: para introducir un texto extenso. Hasta 65.535 caracteres •Numérico: para introducir números •Fecha/Hora: para introducir datos en formato fecha u hora •Moneda: para introducir datos en formato número y con el signo monetario •Autonumérico: en este tipo de campo, Access numera automáticamente el
contenido •Sí/No: campo lógico. Este tipo de campo es sólo si queremos un contenido del tipo Sí/No, Verdadero/Falso, etc. •Objeto OLE: para introducir una foto, gráfico, hoja de cálculo, sonido, etc. •Hipervínculo: podemos definir un enlace a una página Web key son punteros para poder asociarse con una o varias columnas de la tabla. Esto sirve para agilizar las consultas a las tablas, evitando de esta manera que myQSL tenga que revisar todos los datos disponibles para devolver el resultado.
6. Pruebe cada uno de los comandos mencionados, utilizando como base el ejemplo de la clase de la semana #12. Use el servidor SERFIEC de la facultad. Resultado de la prueba: Insertar datos: Para insertar datos a la tabla utilizamos: s.executeUpdate("INSERT INTO estu (nombre,apellido,edad)VALUES('Sanchez','Azurim',23)");
Mensaje que se genera se accesa a la tabla estu.
Se le Inserto los datos de Azurim Sanchez
Eliminar Datos: Para eliminar datos de la tabla se utilizo: s.executeUpdate("DELETE FROM estu WHERE nombre='Sanchez'");
Mensaje que se genera al eliminar datos de la tabla estu
Se Se elimino los datos de Azurim, para ello se utilizo la cláusula where
Actualizar Datos: Para ello se utilizo: s.executeUpdate("UPDATE estu SET edad=21 WHERE nombre='Jairo'");
Mensaje que se genera acceder a la tabla estu
Se Actualizo la edad de Jairo, para ello se utilizo la cláusula where. Antes tenia 17 ahora se la actualiza por 21.
Antes
Después
Consultar Datos: Para hacer la consulta a la tabla estu se utilizo el comando Select.
s.executeQuery ("SELECT nombre,apellido,edad FROM estu");
Elabore un programa OO que lea el archivo de texto de las calificaciones de los estudiantes del CRUV y cree una tabla de profesores, otra de estudiantes y otra de asignatura. ¿Dedicó tiempo para diseñar sus tablas?¿Qué datos pueden duplicarse y cuáles no?
Programa //Clase BaseDatos se encarga de invocar a todos los metodos ya sea para crear las tablas, para insertar los datos en las tablas o realizar una consulta de un estudiante,, esta opciones son manejadas por medio de un menu. import java.sql.*; import java.io.*; import javax.swing.*; public class BaseDatos { public static void main (String[] args) { Statement conect; int opc=0; RemotoMysql objeto3 = new RemotoMysql(); //objeto de la clase que realiza la conexion conect=objeto3.coneccion(); //metodo de conexion CrearTablas objeto1 = new CrearTablas(conect);//objeto de la clase que crea las tablas InsertarDatos objeto2 = new InsertarDatos(conect); //objeto de la clase que inserta los datos a la tabla
while(opc!=4){ System.out.println("\n\n\n ****************************MENU******************"+"\n" +" Opciones a Marcar "+"\n"+" * 1: Crear las tablas" +"\n"+" * 2: Insertar Datos en las tablas"+"\n"+" * 3: Consultar estudiante"+"\n"+" * 4: Salir del programa"); String op = JOptionPane.showInputDialog(null,"*Seleccione una opcion*"); opc=Integer.parseInt(op); switch (opc) { case 1: { objeto1.crear(); } break; case 2: { //insertar datos del archivo a las tablas String mensajes="Introduzca el nombre del archivo"; String archivo=objeto3.Captura(mensajes); objeto2.inserta(archivo); } break; case 3: { //consultar los datos del estudiante String mensajes="Introduzca la cedula del estudiante"; String ced=objeto3.Captura(mensajes); ConsultaDatos objeto4=new ConsultaDatos(conect,ced); objeto4.ConsultaEstudiante(); }
break; case 4: { System.out.println("\n\n } break; }//fin switch
Fin del Programa
\n\n");
} } } /**************************************************************************************************/
//Clase CrearTablas se encarga de crear las tablas de estudiante, profesor y asignatura en la base de datos por medio de los comandos de SQL. import java.sql.*; public class CrearTablas { Statement s; public CrearTablas(Statement conect) { this.s=conect; } public void crear(){ Connection conn = null; try { //Creacion de la tabla profesor (tbleprofesor) s.executeUpdate("CREATE TABLE IF NOT EXISTS tbleprofesor (nombre_Prof VARCHAR(40), cod_prof VARCHAR(4))"); //Creacion de la tabla estudiante (tbleestudiante) s.executeUpdate("CREATE TABLE IF NOT EXISTS tbleestudiante (nombre_Est VARCHAR(40), nota CHAR, cod_prof VARCHAR(4))"); //Creacion de la tabla asignatura (tbleasignatura) s.executeUpdate("CREATE TABLE IF NOT EXISTS tbleasignatura (nombre_Asig VARCHAR(40), cod_asig VARCHAR(4), cod_prof VARCHAR(4))"); System.out.println ("\n\n\n"); System.out.println (" Se ha creado la tabla de Estudiante, Profesor, Asignatura "); s.close (); }catch (Exception e) { System.err.println ("acceso a la tabla"+e); } } }
//Clase InsertaDatos se encarga de leer un archivo que contiene la cedula del estudiante , la nota , el nombre del profesor y la asignatura. Para luego insertarlo dentro de cada tabla dependiendo de los datos que necesite cada una. import java.io.*; import javax.swing.*; import java.sql.*; public class InsertarDatos { Statement s; public InsertarDatos(Statement conect) { this.s=conect; } public void inserta(String archivo){ // --** VARIABLES LOCALES **-String datresul=" ", result=" ", esca=" "; String esc=new String(); String car=new String(); String codigoasig=" ",asignatura=" ", cod_profe=" ", nombreprof=" ", cedula=" ",calif=" "; try { FileReader arch1 = new FileReader(archivo); BufferedReader arch = new BufferedReader(arch1); String linea=new String(); String asig=new String(); String prof=new String(); while((linea=arch.readLine())!= null){ //lectura del archivo int cantline=linea.length(); //calcula la longitud de la linea String bus_escuela = new String("ASIGNATURA"); int cant2 = linea.indexOf(bus_escuela); if(cant2 != -1){ //se captura el nombre y codigo de la asignatura codigoasig=linea.substring(22,26); //codigo de la asignatura asignatura=linea.substring(27,cantline); //nombre de la asignatura } String bus_prof = new String("PROFESOR"); int cant3 = linea.indexOf(bus_prof); if(cant3 != -1){ //se captura el nombre y el codigo del profesor cod_profe=linea.substring(15,19);//codigo del profesor nombreprof=linea.substring(20,cantline);//nombre del profesor //Aqui se inserta en la tabla asignatura el nombre, el codigo y el cod del prof s.executeUpdate("INSERT INTO tbleasignatura (nombre_Asig , cod_asig , cod_prof )VALUES('"+asignatura+"','"+
codigoasig+"','"+cod_profe+"')"); //aqui se inserta en la tabla profesor el nombre, codigo y el cod del prof s.executeUpdate("INSERT INTO tbleprofesor (nombre_Prof , cod_prof ) VALUES('"+nombreprof+"','"+cod_profe+"')"); } try { if(cantline==43){ cedula=linea.substring(15,31); calif=linea.substring(42,cantline); //aqui se inserta en la tabla estudiante la cedula , la calificacion y el cod prof s.executeUpdate("INSERT INTO tbleestudiante (nombre_Est , nota , cod_prof )VALUES('"+cedula+ "','"+calif+"','"+cod_profe+"')"); } }catch(Exception e) { } }//fin del while s.close(); try { arch.close(); } catch ( IOException e ) { System.out.println ( "El archivo no se pudo cerrar correctamente"; } }catch (Exception e) { System.out.println ( "El archivo no se pudo cerrar correctamente" + "\n" + e;); } } } //fin metodo
// Clase remotoMysql se encarga de realizar la conexión con la base de datos la cual devuelve un Statement que sera utilizado por otras clases. import java.sql.*; import java.io.*; import javax.swing.*; class RemotoMysql { Statement st; String mensaje; public RemotoMysql() { } /*******************************************************************************************/ public Statement coneccion() { Connection conn = null; try { String userName = "FIEC-03"; String password = ""; // se indica el servidor, puerto y la base de datos facultad de mysql String url = "jdbc:mysql://serfiec:3306/facultad"; Class.forName ("com.mysql.jdbc.Driver").newInstance (); conn = DriverManager.getConnection (url, userName, password); System.out.println ("Coneccion Database OKKK!!!"); try { Statement st = conn.createStatement (); } catch (Exception e) { System.err.println ("acceso a la tabla"+e); } }catch (Exception e) { System.err.println ("No puede conectarse al Servidor Mysql"); } finally { if (conn != null)
{} } return(st);// } /*******************************************************************************************/ public String Captura(String mensajes) { mensaje = JOptionPane.showInputDialog(null,mensajes); return(mensaje); } }
7. Diseñe una clase que permita consultar a partir de la cédula, las calificaciones identificadas con asignatura y docente. //Clase ConsultaDatos por medio de la cedula del estudiante realiza la busqueda en la tabla tbleestudiante, donde capturara la cedula, la nota y el codigo del profesor como una llave primaria, que se utilizara para buscar en las otras tablas los datos de la asignatura y el profesor del estudiante import java.sql.*; public class ConsultaDatos { Statement s; String cedula; String lista=new String(); /*******************************************************************************************************/ public ConsultaDatos(Statement conect,String ced){ this.s=conect; this.cedula=ced; } /*******************************************************************************************************/ //este metodo busca la cedula del estudiante en la tabla tbleestudiante y tambien utiliza el metodo ConsultaProf_Est que se encuentra en esta misma clase. public void ConsultaEstudiante() { String n_prof; String n_asig; try {
//aqui se realiza la busqueda de la cedula del estudiante en la tabla tbleestudiante s.executeQuery ("SELECT nombre_Est,nota,cod_prof FROM tbleestudiante WHERE nombre_Est='"+cedula+"'"); ResultSet rs = s.getResultSet (); int count = 0; System.out.println (" Consulta "); System.out.println ("||||||||||||||||||||||||||Datos del Estudiante |||||||||||||||||||||||||||||\n"); while (rs.next ()) { //captura la cedula del estudiante String nombreVal = rs.getString ("nombre_Est"); //captura la nota del estudiante String codVal = rs.getString ("nota"); //captura el nombre del profesor String codValor = rs.getString ("cod_prof"); //metodo que devuelve el nombre del profesor y la asignatura String datos=ConsultaProf_Est(codValor); String[] busqueda=datos.split(","); n_prof=busqueda[0]; //nombre del profesor n_asig=busqueda[1]; //nombre de la asignatura System.out.println ("\n Cedula =
" + nombreVal+ "\n Calificacion = " + codVal); System.out.println ("\n Nombre del Profesor = " + n_prof + "\n Nombre de la asignatura = " + n_asig); System.out.println ("............................................................................"); ++count; } rs.close (); s.close (); System.out.println ("\n Registros recuperados...."+ count); }catch (Exception e) { System.err.println ("acceso a la tabla"+e); } } //fin del metodo ConsultaEstudiante
/**********************************************************************************************/ //Este metodo se encarga de buscar los datos de la asignatura y el profesor por medio del codigo que se obtiene el el metodo de la consulta del estudiante. public String ConsultaProf_Est (String codValor) { String nameProf=new String(); String nameAsig=new String(); Connection conn = null; try
{ String userName = "FIEC-03"; String password = ""; // se indica el servidor, puerto y la base de datos facultad de mysql String url = "jdbc:mysql://serfiec:3306/facultad"; Class.forName ("com.mysql.jdbc.Driver").newInstance (); conn = DriverManager.getConnection (url, userName, password); try { Statement st1 = conn.createStatement (); Statement st2 = conn.createStatement (); //aqui se realiza la busqueda del codigo del profesor dentro de la tabla tbleprofesor st1.executeQuery ("SELECT nombre_Prof,cod_prof FROM tbleprofesor WHERE cod_prof='"+codValor+"'"); ResultSet s1 = st1.getResultSet (); //aqui se realiza la busqueda del codigo del profesor dentro de la tabla tbleasignatura st2.executeQuery ("SELECT nombre_Asig,cod_asig,cod_prof FROM tbleasignatura WHERE cod_prof='"+codValor+"'"); ResultSet s2 = st2.getResultSet (); int count = 0; while (s1.next ())//busqueda de la materia { nameProf=s1.getString ("nombre_Prof");//captura el nombre del profesor } while (s2.next ())//busqueda del profesor { nameAsig=s2.getString ("nombre_Asig");//captura el nombre de la asignatura } s1.close(); st1.close(); st2.close(); s2.close(); } catch (Exception e) { System.err.println ("Problemas con acceso a la tabla"+e); } }catch (Exception e) { System.err.println ("No puede conectarse al Servidor Mysql"); } finally { if (conn != null) {
try { conn.close (); } catch (Exception e) { /* sin mensajes de error */ } } } lista=nameProf + "," + nameAsig; return(lista); }//fin del metodo ConsultaProf_Est } /***************************************************************************************************/
8. Compare la solución del punto #8 usando Base de datos vs. Archivos. Base de datos
Archivos
*La busqueda de un registro se realiza mas rapido,reduciendo codigo, ya que en una base de datos se trabaja con tablas que permite organizar la informacion de una mejor manera, accediendo solo a las tablas donde se encuentra un registro o la informacion que se necesita mediante la clausula WHERE.
*La busqueda de un registro o un dato determinado en un archivo, necesita de muchas condiciones para encontrar un registro, ya que la informacion no esta estructurada por tabla sin no de manera secuencial, y esto es una desventaja para cualquier programador ya que necesita la implementacion de mucho codigo y tiempo para encontrar los registro que se necesitan.
9. Evidencia de Ejecuión menu del programa
aquí se muestra el mensaje cuando son creadas las tablas dentro de la base de datos
aquí se le pide al usuario que introduzca el nombre del archivo
aquí se despliega un mensaje al momento de insertar los datos a las tablas
aquí se le pide al usuario quue introduzca la cedula del estudiante a buscar
aquí se despliega los datos del estudiante como la cedula, la nota, el nombre del profesor y el nombre de la asignatura.
En su sitio de esnips coloque un documento con el desarrollo de este laboratorio. Presente un comentario en http://www.esnips.com/web/inf222 identificando el URL de su documento para que todos podamos compartir los trabajos. Haga de http://www.esnips.com/web/inf222 su sitio favorito.