Escolar Documentos
Profissional Documentos
Cultura Documentos
“Laboratorio # 9”
“Mysql
Mysql”
Mysql
ESTUDIANTES:
PROFESOR:
DIEGO SANTIMATEO
SEMESTRE:
II SEMESTRE – II AÑO
FECHA DE ENTREGA:
13-DICIEMBRE-2007
Índice
1- Describa qué es una base de datos y un motor (manejador) de base de
datos. ............................................................................................................................... 3
2- Describa una tabla y sus componentes. Haga ejemplos de varios registros.
Indique cómo están constituidos los registros. ......................................................... 3
3- ¿Qué es SQL? ¿Qué es MYSQL? ......................................................................... 4
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. ¿Cuál es la utilidad de la cláusula WHERE? ................................................. 5
5- ¿Cuáles son los tipos de los campos y qué significa llave primaria o key? .... 7
7. 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?................................................................................ 17
8- Diseñe una clase que permita consultar a partir de la cédula, las
calificaciones identificadas con asignatura y docente. ......................................... 17
9- Compare la solución del punto #8 usando Base de datos vs. Archivos. ....... 34
1- Describa qué es una base de datos y un motor (manejador) de base de
datos.
Las filas son llamadas generalmente registros, y las columnas son llamadas
campos, básicamente los campos son las propiedades de un registro.
Cada tabla creada debe tener un nombre único en la cada Base de Datos,
haciéndola accesible mediante su nombre o su sinónimo (dependiendo del tipo
de base de datos elegida).
La estructura de las tablas viene dado por la forma de un archivo plano, los
cuales en un inicio se componían de un modo similar.
Para hacer búsquedas rápidas deben definirse campos índice. Los campos
comunes por donde se conectan las tablas deben tener un índice definido.
Se conoce como gestor o motor de bases de datos al programa de ordenador
que sirve para definir, diseñar y utilizar los registros, ficheros y formularios de la
base de datos. Generadores de bases de datos muy conocidos son ORACLE,
SyBase, INFORMIX, MySQL, PARADOX, ACCESS, etc.
1- INSERT inserta nuevas filas en una tabla existente. Los formatos INSERT ...
VALUES e INSERT ... SET, insertas filas basándose en los valores
especificados explícitamente. El formato The INSERT ... SELECT inserta filas
seleccionadas de otra tabla o tablas. El formato INSERT ... VALUES con una
lista de múltiples valores está soportada por MySQL desde la versión 3.22.5. La
sintaxis INSERT ... SET está soportada por MySQL desde la versión 3.22.10.
mysql> INSERT INTO tbl_name () VALUES();
5- CREATE TABLE: crea una tabla con el nombre dado. Se debe poseer el
privilegio CREATE para la tabla.
Por defecto, la tabla se crea en la base de datos actual. Se producirá un error si
la tabla ya existe, si no hay una base de datos actual o si la base de datos no
existe.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(definición_create,...)]
[opciones_tabla] [sentencia_select]
5- ¿Cuáles son los tipos de los campos y qué significa llave primaria o
key?
5.1 Tipos de Campos: Los tipos de los campos en forma general los
podríamos agrupar en tres que describimos a continuación:
1- Tipos numéricos:
Existen tipos de datos numéricos, que se pueden dividir en dos grandes
grupos, los que están en coma flotante (con decimales) y los que no.
TinyInt: es un número entero con o sin signo. Con signo el rango de valores
válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255
SmallInt: número entero con o sin signo. Con signo el rango de valores va
desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.
MediumInt: número entero con o sin signo. Con signo el rango de valores va
desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.
Integer, Int: número entero con o sin signo. Con signo el rango de valores va
desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a
429.4967.295
BigInt: número entero con o sin signo. Con signo el rango de valores va desde
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango
va desde 0 a 18.446.744.073.709.551.615.
2- Tipos fecha:
A la hora de almacenar fechas, hay que tener en cuenta que Mysql no
comprueba de una manera estricta si una fecha es válida o no. Simplemente
comprueba que el mes esta comprendido entre 0 y 12 y que el día esta
comprendido entre 0 y 31.
Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de
enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es
de año-mes-dia
Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos
y 59 segundos a 838, 59 minutos y 59 segundos. El formato de
almacenamiento es de 'HH:MM:SS'
3-Tipos de cadena:
Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo
Test y los tipo BLOB (Binary large Object)
La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de
realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena
sin tener en cuenta las Mayúsculas y las minúsculas, el tipo BLOB se ordena
teniéndolas en cuenta.
Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser
ficheros.
TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres.
Enum: campo que puede tener un único valor de una lista que se especifica. El
tipo Enum acepta hasta 65535 valores distintos
Set: un campo que puede contener ninguno, uno ó varios valores de una lista.
La lista puede tener un máximo de 64 valores.
En una base de datos, la distinción de una entidad entre otra se debe a sus
atributos, lo cual lo hacen único. Una llave primaria es aquel atributo el cual
consideramos clave para la identificación de los demás atributos que describen
a la entidad. Por ejemplo, si consideramos la entidad ALUMNO dela
universidad de Panamá, podríamos tener los siguientes atributos: Nombre,
Cédula, Semestre, Carrera, Dirección, Teléfono, etc. de todos estos atributos el
que podremos designar como llave primaria es el número de la cédula, ya que
es diferente para cada alumno y este nos identifica en la institución.
Claro que puede haber más de un atributo que pueda identificarse como llave
primaria en este caso se selecciona la que consideremos más importante, los
demás atributos son denominados.
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.
prueba de comandos de SQL en el servidor SERFIEC
• Insertar un registro
Ejemplo:
Por medio de una aplicación añadimos un registro a la tabla que por la cual
indica los siguientes datos.
Cantidad de datos:
• se pide que se inserte la cantidad de datos para insertar en la tabla
Ejemplo:
• Actualizar un registro
UPDATE es el comando que nos sirve para modificar los registros de una tabla,
como para el caso de DELETE, necesitamos especificar por medio de WHERE
cuáles son los registros en los que queremos hacer efectivas nuestras
modificaciones. Además, tendremos que especificar cuáles son los nuevos
valores de los campos que deseamos actualizar.
Ejemplo:
- nombre: Guillermo
- apellido: Urriola
- codigo: 81
• se pide que se inserte el código del registro actual para actualizarlo
s.executeUpdate(upd);
Ejemplo:
Para crear una tabla utilizamos el comando CREATE TABLE junto con el
nombre de la tabla que sirve como parámetro para establecer la función.
Ejemplo:
Estas son las tablas que manipulamos en la base de datos facultad que por
consiguiente almacenan los datos indicados como por ejemplo la tabla
estudiante almacena el código de curso , el numero , la cedula y la nota del
estudiante, la tabla asignatura almacena el curso y los datos de la asignatura
como el código de asignatura, numero de profesor y el nombre de la asignatura
y la tabla profesor almacenara el código de curso y los datos del profesor como
el código de profesor y el nombre del profesor.
do
{
Menu1 men = new Menu1();
o = men.opcion();
switch (o)
{
case 1:{
String ar = cap.getarch();//metodo que decuelve el archivo que contiene los datos del CRUV
TablasSQL ins = new TablasSQL(ar,1);//inicializa objeto de la clase TablasSQL
ins.insRegTabla();//metodo que inserta o añade registros a las tablas de la base de datos
break;
}
case 2:{
String c = cap.Getcedula();//metodo que devuelve la cedula
ConsultaRegistro co = new ConsultaRegistro(c,0);//inicializa objeto de la clase ConsultaRegistro
co.consultarDatos();//metodo que consulta los datos en registros a partir de una cedula
break;
}
case 3: {
ntab = cap.getnomTabla(1);//metodo que devuelve el nombre de una tabla
TablasSQL eli = new TablasSQL(ntab,0);//inicializa objeto de la clase TablasSQL
eli.eliminaRegs();//metodo que elimina registros de una tabla
break;
}
case 4:{
ntab = cap.getnomTabla(2);//metodo que devuelve el nombre de una tabla
CaptDespDatos des = new CaptDespDatos(ntab,2);//inicializa objeto de la clase CaptDespDatos
des.DespDatosSQL();//metodo que graba los registros de una tabla en un archivo
break;
}
default:System.out.println("\nopcion incorrecta");
while (o<5);
/*******************************************************************************
******/
/******************************CLASE Menu1
******************************************/
import javax.swing.*;
import java.text.*;
class Menu1
{
public Menu1()
{
/*clase abstracta que administra la conexion con MYSQL y el flujo de entrada/salida de archivos de texto*/
public DriversConnSQL()
{
Class.forName (ConxDriver).newInstance ();//instancia que carga los controladores jdbc necesarios para
conectar con mysql
conn = DriverManager.getConnection (url, userName, password);//obtiene la conexion remota con la
base de datos de mysql
s0 = conn.createStatement ();//crea la instancia de conexion con mysql para usarla en la 1 tabla
s1 = conn.createStatement ();//crea la instancia de conexion con mysql para usarla en la 2 tabla
s2 = conn.createStatement ();//crea la instancia de conexion con mysql para usarla en la 3 tabla
if (ident==1)
{
arch1 = new FileReader(this.operador);//instancia de la clase que nos permite leer un archivo
in = new BufferedReader(arch1);//instancia de la clase que nos permite leer una cadena del archivo
}
else
if (ident==2)
{
arch2 = new FileWriter("ResTabla.txt"); //declaracion para escribir en el archivo
as = new BufferedWriter(arch2);//instancia de la clase que permite grabar en el archivo
arn = new PrintWriter(as);//instancia que nos permite grabar datos en el archivo
System.out.println ("Generando el archivo ResTabla.txt");
}
}
catch (Exception e)
{
System.err.println ("No puede conectarse al Servidor Mysql " + e );
}
}
/*******************************************************************************
******/
/********************************CLASE TablasSQL
************************************/
import java.sql.*;
import java.io.*;
/*subclase heredera de DriversConnSQL que inserta registros de un archivo de lectura y elimina registros
de una tabla*/
}
else
if (s.startsWith(" PROFESOR") )
{
pro = s.substring(s.indexOf(':')+2,s.length());//extrae el string que contiene los datos del
profesor
ins1 = "INSERT INTO profesor (curso,datoprofe) VALUES (
'"+cur+"','"+pro+"')";//string con la sentencia sql que inserta el curso y los datos del profesor
s1.executeUpdate(ins1);//ejecuta y actualiza la sentencia sql insertando los datos en
la tabla profesor
}
else
if ( s.length()==43 )
{
char pl = s.charAt(38);
if (pl==' ')
{
String nuc = s.substring(7,8);//extrae el numero
String cede = s.substring(15,31);//extrae la cedula
String not = s.substring (42,43);//extrae la nota
ins2 = "INSERT INTO estudiante (curso,numero,cedula,nota) VALUES (
'"+cur+"','"+nuc+"','"+cede+"','"+not+"')";//string con la sentencia sql que inserta el curso , numero, cedula
y nota en la tabla estudiante
s2.executeUpdate(ins2);//ejecuta y actualiza la sentencia sql insertando los
datos en la tabla estudiante
}
}
}//if
}//while
try
{
in.close();//cierra el archivo de lectura
}//try2
catch ( IOException e )//captura una excepcion de entrada/salida con un mensaje
{
System.err.println( "El archivo no se pudo cerrar correctamente" );
System.exit( 1 );//sale de la ejecucion del sistema
}
s0.close();
s1.close();
s2.close();
System.out.println("los registros se han insertado satisfactoriamente...");
}//try conexion a la tabla
catch (Exception e)
{
System.err.println ("Problemas con acceso a la tabla"+e);
}
}
}
catch (Exception e)
{
System.err.println ("Problemas con acceso a la tabla "+ e);
}
/*******************************************************************************
******/
/*******************************CLASE CaptDespDatos
**********************************/
import javax.swing.*;
import java.text.*;
import java.sql.*;
/*subclase CaptDespDatos heredera de DriverConnSQL que captura archivo de texto, cedula y realiza una
consulta de resgistros a una tabla y los graba en un archivo*/
public CaptDespDatos()
{
if (this.operador.equals("asignatura") )
{
s0.executeQuery ("SELECT curso,datoasig FROM asignatura");//instancia que ejecuta una consulta de
campos en la tabla asignatura
rs = s0.getResultSet ();//instancia del metodo que devuelve un conjunto de resultado de la consulta
dats = "datoasig";
ag= true;
}
else
if (this.operador.equals("profesor") )
{
s1.executeQuery ("SELECT curso,datoprofe FROM profesor");//instancia que ejecuta una consulta de
campos en la tabla profesor
rs = s1.getResultSet ();//instancia del metodo que devuelve un conjunto de resultado de la consulta
dats = "datoprofe";
pr=true;
}
else
if (this.operador.equals("estudiante") )
{
s2.executeQuery ("SELECT curso,numero,cedula,nota FROM estudiante");//instancia que ejecuta
una consulta de campos a la tabla estudiante
rs = s2.getResultSet ();//instancia del metodo que devuelve un conjunto de resultado de la consulta
es=true;
}
}//if
}//finally
}//fin del metodo DespDatosSQL
public void insRegTabla()
{/*no es necesario implementar el uso de este metodo en esta subclase*/ }
String [] cant = cedula.split("-");//se fracciona la cedula con las rayas en el split obteniendo la provincia,
el tomo y asiento
int f=cant.length;
return (cedval);
if (func==1)
f = "eliminar registros";
else
if (func==2)
f="ver registros";
String nomtab = JOptionPane.showInputDialog(null, "inserte el nombre de la tabla para " + f + ": ");
return (nomtab);
/*******************************************************************************
******/
/****************************CLASE ConsultaRegistro
***********************************/
import java.sql.*;
/*subclase heredera de DriversConnSQL clase que consulta registros de calificaciones a partir de una
cedula*/
s0.executeQuery (cons);
rs = s0.getResultSet();
int count = 0;
System.out.flush();
if (count==0)
throw new Exception ("error! la cedula no se encuentra en la base de datos!");
/*******************************************************************************
******/
RESULTADOS Y EVIDENCIA DE EJECUCION
Cada opción se selecciona con un número del 1 al 5, como se muestra, las opciones
disponibles son: añadir registros de un archivo, realizar consulta, eliminar registros en
tabla, ver registros en tabla y salir del sistema.
2. realizar consulta
Para la consulta se pide que se inserte una cedula con guiones y sin los ceros
adjuntos para facilitar la rapidez de inserción de datos.
En la imagen se detalla que se esta insertando una cedula solamente con los
guiones.
Para eliminar los registros de una tabla se requiere que se inserte el nombre de
la tabla a la cual se desea eliminar toda la información que contiene.
Esta opción despliega todos los registros de una tabla abriendo un archivo de
texto desde el explorador de Windows, insertándole el nombre de la tabla para
efectuar la operación.
Entre los archivos y las base de datos existe mucha sutileza en cuanto a la
redundancia de procesamiento y almacenamiento de información, según lo
analizado e investigado, entre las dos estructuras hay poca similitud entre el
acceso a la información y a la conexión. A continuación se mostrara una tabla
comparativa de las dos estructuras.