Vous êtes sur la page 1sur 18

INF 222

MANEJO DE BASE DE DATOS EN JAVA

DIEGO SANTIMATEO

FÁTIMA DEL R. ÁLVAREZ 9-722-549

14 DE DICIEMBRE DE 2006
Cuando nos planteamos realizar un programa (en cualquier lenguaje) llegamos
a un momento donde se hace necesario utilizar una base de datos.

Mi proyecto busca resaltar principalmente los conocimientos en manejo de


archivos y creación de base de datos usando la plataforma Java.
También resalta la estructuración de un programa Java, la generación de
Javadoc entre otros aspectos importantes.
Este trabajo esta estructurado en tres partes importantes:
• Primero la conexión a la base de datos MySQL usando la plataforma
Java.
• Segundo el manejo y lectura de archivos como punto de partida para
crear una base de datos con registros de cedulas, profesores,
asignaturas, notas y facultades.
• Tercero lograr que este base de datos sea consultada por cédula, y
modificada por detalles de asignatura o de profesor.

Cabe señalar que un buen diseño de la tabla determinará el éxito o fracaso de


nuestra base de datos. Existen abundantes estudios acerca de la normalización
de las bases de datos, cuya complejidad excede de las posibilidades de
nuestro curso. A un nivel mucho mas básico se puede indicar que la sola
elección del tipo de tabla adecuado, y del tipo (y longitud) de datos de cada
columna permitirá rapidez y eficacia en el sistema que se este desarrollando.

Lo más importante y sobresaliente de toda esta experiencia, que me acostado


mucho porque requiere dedicación y tiempo, es el conocimiento y el sentido de
responsabilidad que nos prepara para la vida profesional que en estos tiempos
exige trabajar bajo presión y sobre todo nos ayuda a desarrollarnos como
futuros profesionales.
Lo primero que realice para desarrollar este trabajo; fue la conexión a la base
de datos, analizando el código proporcionado por el profesor, claro haciendo
los cambios necesarios para poder conectarme al servidor FIEC. Como tuve
problemas para conectarme con el servidor al comenzar a probar este código,
lo que hice para solucionar este inconveniente fue instalar un nuevo driver, que
me proporciono el compañero Carlos que ya se había conectado al servidor.

import java.sql.*;

public class ConectaMysql


{
public static void main (String[] args)
{
Connection conn = null;

try
{
String userName = "FIEC-02";
String password = "estudiante";
String url = "jdbc:mysql://serfiec:3306/prueba";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
System.out.println ("Conexion Database OKKK!!!");
try
{
//Uso de la tabla estudiante0
Statement s = conn.createStatement ();
s.executeQuery ("SELECT codigo, nombre FROM inf222");
ResultSet rs = s.getResultSet ();
int count = 0;
System.out.println ("Datos de los Estudiantes \n");
while (rs.next ())
{
int codigoVal = rs.getInt ("codigo");
String nombreVal = rs.getString ("nombre");
//String cedVal = rs.getString ("ced");
System.out.println ("\n Nombre = " + nombreVal + "\n Codigo = " + codigoVal );
++count;
}
rs.close ();
s.close ();
System.out.println ("\n Registros recuperados...."+ count);
}
catch (Exception e)
{
System.err.println ("Problemas con acceso a la tabla");
}
}
catch (Exception e)
{
System.err.println ("No puede conectarse al Servidor Mysql"+e.toString());
}
finally
{
if (conn != null)
{
try
{
conn.close ();
System.out.println ("\n !!!!!Cerrada la coneccion a Mysql");
}
catch (Exception e) { /* sin mensajes de error */ }
}
}
}
}
Para leer los registros y luego crear la tabla de la bases de datos en FIEC,
primero codifique las lectura del archivo por línea, después le agregue los
tokenizer de manera que pudiera extraer todos los registros que necesitaba de
la facultad de administración de publica que son los que me interesaban del
resto de la otras facultades que forman parte del archivo que seleccione.
Más adelante muestro el código fuente de mi clase captura se conecta a la
base de datos y la cual lee el archivo.

Archivo :("2005-SEGUNDO")
La primera vez que utilicé base de datos fue cuando estaba en secundaria en
el Colegio San Vicente de Paúl y daba programación visual Basic entonces
necesitamos crear base de datos en Access para realizar pequeños programas.
MySQL es un sistema de gestión de base de datos, multihilo y multiusuario
nuevo para mi en el sentido de que es la primera vez que lo utilizo para hacer
un programa, pero si había escuchado de el .

La creación de la tabla de MySQL para este trabajo requería, seleccionar


registros, eliminar registros si por equivocación se volvía introducir los datos en
la tabla ya creada, este código me lo proporcionaron por cualquiera
eventualidad, también necesitaba consultar y modificar las tablas que desea.

La parte un tanto complicada es la estructura que debe tener nuestra base de


datos: qué tablas se necesitan y qué columnas estarán en cada tabla de
manera que esta sea rápida y fácil de consultar.

Use la sentencia CREATE TABLE para indicar como estarán conformados los
registros de nuestra facultad.

Inicio con una tabla vacía, porque luego de leído un archivo de texto que
contiene los registros por línea de cada detalle de la facultad de administración
publica tengo posteriormente cargarle el contenido del archivo en las tablas
creadas.

Por tanto, tuve que leer un archivo de texto "2005.SEGUNDO.txt" que


contenía registros por línea con valores separados por tabuladores, cuidando
que el orden de las columnas sea el mismo que utilizamos en la sentencia
CREATE TABLE.

La trabajo pedía como opción corregir detalles de por profesor o asignatura


dentro de los campos de la tabla con una sentencia UPDATE se puede lograr.
Como la selección parcial y total de una tabla se lleva mediante la instrucción
select * tuve que definir los campos que deseaba seleccionar y la tabla en la
cual se quiere hacer la selección que será por cedula, profesor o asignatura.

Algunos comandos útiles:

connection [database]; - Conectarse a esa base de datos.


show tables; - Listar todas las tablas de una base de datos.
show table status; - Muestra información sobre las tablas
• select * from [table] ; - Muestra los registros seleccionados.

import java.io.*;
import java.util.*;
import java.sql.*;

public class Captura {


public void recorrer() {

Connection conn = null;


try
{

String userName = "FIEC-04";


String password = "estudiante";
String url = "jdbc:mysql://serfiec:3306/prueba";
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
System.out.println ("Coneccion Database OKKK!!!");
try
{
FileReader f_entrada = new FileReader("2005-SEGUNDO.txt");
BufferedReader archivo = new BufferedReader(f_entrada);
String a = new String();
String b = new String();
boolean valor = true;
StringTokenizer token;
Statement s = conn.createStatement ();

s.executeUpdate("CREATE TABLE fatiCedula(cedula varchar(20),nota char(1))");


s.executeUpdate("CREATE TABLE fatiProfesor(Profesor varchar(40))");
s.executeUpdate("CREATE TABLE fatiMateria(Materia varchar(60))");
while(valor)
{
a = archivo.readLine();
if((!a.equals(""))&&(!a.equals("")))
{
if(a.equals(" FACULTAD : 01 ADMINISTRACION PUBLICA Semestre:2"))
archivo.readLine();
if(a.substring(0,14).equals(" ASIGNATURA:"))
{
b = archivo.readLine();
b = archivo.readLine();
token = new StringTokenizer(a,":");
a = token.nextToken();
a = token.nextToken();
if(!b.equals(""))
{
b = a+""+b;
//s.executeUpdate("INSERT INTO fatiMateria(Materia)VALUES('"+b+"')");
}
else

s.executeUpdate("INSERT INTO fatiMateria(Materia)VALUES('"+a+"')");


}
if(a.substring(0,14).equals(" PROFESOR :"))
{
token = new StringTokenizer(a,":");
a = token.nextToken();
a = token.nextToken();
s.executeUpdate("INSERT INTO fatiProfesor(Profesor)VALUES('"+a+"')");
}
if(a.equals(" --- -- -- ---- ----- ----"))
{
archivo.readLine();
while(!a.equals(""))
{
a = archivo.readLine();
archivo.readLine();
if(!a.equals(""))
{
String cedula = new String();
cedula = a.substring(15,32);
b = a.substring(42,43);

s.executeUpdate("INSERT INTO fatiCedula(cedula,nota)VALUES('"+cedula+"','"+b+"')");


}
if(a.equals(" 6 09 00 0714 00240 A"))
valor = false;
}
} }
}
s.close();
archivo.close();
f_entrada.close();
}
catch(Exception e)
{
System.err.println ("Problemas con acceso a la tabla\n"+e);
}
}
catch(Exception e)
{
System.err.println ("No puede conectarse al Servidor Mysql");
}

finally
{
if(conn != null)
{
try
{
conn.close ();
System.out.println ("\n !!!!!Cerrada la coneccion a Mysql");
}
catch (Exception e) { /* sin mensajes de error */ }
}
}
}//Fin del método
}//fin de la clase

Es esta clase la que aloja en main y los métodos de captura y despliegue lo


que hice fue modificar la antigua clase captura e imprime.

import java.io.*;
import javax.swing.*;

public class Principal {


public String obtener(String msg)
{
String ret;
ret=JOptionPane.showInputDialog(null,"\n"+msg);
return (ret);
}

public void despliega(String msg1)


{
JOptionPane.showMessageDialog(null,"\n"+msg1);
}

public static void main(String[] args)throws IOException {

Captura a = new Captura();


Consulta b=new Consulta();
try {
a.recorrer();
b.Calificaciones();

}
catch(Exception error)
{
JOptionPane.showMessageDialog(null, error.toString());
}
}
Esta clase consulta por
cedula y luego envia un
msg a Main.

Clase Captura La clase captura se encarga de alojar el


Clase Consulta método que lee y extrae los registros del
archivo y luego toma esos datos para
+void recorrer() crear las tres tablas de la Base De
+void Calificaciones() Datos.
No utilicé variables de instancia.

Clase Principal

+Void Main :String()


+String obtener:String() Clase Correcion
+void despliega:String()
+ void arreglo()

La clase principal contiene el main


que hace el llamado al método de la Me permite corregir
clase captura, recorrer (). información
Además contiene los métodos que directamente a la base
me permiten obtener y desplegar lo de datos que puede ser
que necesito consultar. de la materia o el
profesor

La clase principal la utilice como si fuera la clase capturaImprime y allí mande


el mensaje proveniente de la clase consulta.

:
Esta clase me permite consultar las notas del estudiante mediante la
cedula en ella accedo a la base de datos para buscar la información que
necesito.

import javax.swing.*;
import java.sql.*;

public class Consulta


{
public void Calificaciones()
{

Principal sen=new Principal();


String msg="Indique la Cédula para consultar : ";
String cedula="";
Connection conn = null;
try
{
String userName = "FIEC-04";
String password = "estudiante";
String url = "jdbc:mysql://serfiec:3306/prueba";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
System.out.println ("Coneccion Database OKKK!!!");
try
{
Statement s = conn.createStatement ();
cedula=sen.obtener(msg);

String sql= "SELECT * FROM fatiCedula where


cedula= '"+cedula+"'";
s.executeQuery(sql);

ResultSet fa= s.getResultSet();

int count = 0;

int c=0;

System.out.println("\nBienvenido");

System.out.println("La Información Buscada es:");

System.out.println("............................");

while (fa.next ())

{
System.out.println ( "\tCédula = " + fa.getString ("cedula") + "\tNota = " + fa.getString ("nota"));

if(fa.getString ("Cedula").equals("F"))

{
c++;

++count;

} int fracaso=c/count;

JOptionPane.showMessageDialog (null,"Este es el procentaje de materias


Fracasadas"+fracaso);
s.close ();
System.out.println ("\n Termmino el despliegue de Datos");
catch (Exception e)
{
System.err.println ("Problemas con acceso a la tabla\n" + e);
}
}
catch (Exception e)
{
System.err.println ("No puede conectarse al Servidor Mysql"+e.toString());
}
finally
{
if (conn != null)
{
try
{
conn.close ();
System.out.println ("\n !!!!!Cerrada la coneccion a Mysql");
}
catch (Exception e) { /* sin mensajes de error */ }

}
}
}
Cédula = 02 00 0718 00830 Nota = B
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = B
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = B
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = A
Cédula = 02 00 0718 00830 Nota = C
Cédula = 02 00 0718 00830 Nota = B
Cédula = 02 00 0718 00830 Nota = A

Presenta las cedula y la nota del estudiante, además envía un mensaje


diciendo que porcentaje de materias a fracasado ese estudiante.

Esta clase me permite arreglar cualquier dato de la tabla de profesor o la tabla


materia

import javax.swing.*;

import java.sql.*;
public class Correcion {
public void arreglo()
{
Principal sen=new Principal();
int a;
String mensaje="";
String tabla="";
String campo="";
String msg1;
String msg="";

msg1="Marque 1 si desea corregir Materia,Marque 0 si desea corregir Profesor" ;

a=Integer.parseInt(sen.obtener(msg1));

if(a==1)

msg="Indique la Materia: ";

mensaje=sen.obtener(msg);

tabla="fatiMateria";
campo="Materia";
}
else {if (a==0)
{
msg="Indique el Profesor: ";
mensaje=sen.obtener(msg);
tabla="fatiProfesor";
campo="Profesor";
}}

Connection conn = null;


try
{
String userName = "FIEC-01";
String password = "";
String url = "jdbc:mysql://serfiec:3306/prueba";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
System.out.println ("Coneccion Database OKKK!!!");
try
{
Statement s = conn.createStatement ();
String sql= "UPDATE TABLE '"+ tabla +"' SET '"+campo+"'='"+ mensaje+"' ";

s.executeUpdate(sql);
ResultSet fa= s.getResultSet();
}
catch (Exception e)
{
System.err.println ("Problemas con acceso a la tabla\n" +e.toString());
}
}
catch (Exception e)
{
System.err.println ("No puede conectarse al Servidor Mysql"+e.toString());
}

}
}
• El desarrollo de este trabajo me ha permitido ampliar mis conocimientos
acerca del el uso de base de datos MySQL bajo el dominio del lenguaje
Java a la vez he logrado reforzar debilidades en cuenta al manejo de
archivos de datos.
• Es importante resaltar que la utilización de la base de datos para
almacenar información es de suma importancia porque la mayoría de las
empresas y negocios la están utilizando para registrar y controlar sus
operaciones ya que la automatización de registros de cualquier
categoría agiliza en gran manera la búsqueda y almacenamiento de
información importante.
• Familiarizarse con la estructura de un programa en Java facilita el
desarrollo de aplicaciones para automatizar los sistemas en general ya
que permite, analizar y diseñar soluciones para los problemas y
necesidades de nuestra vida diaria con una visión cercana a la realidad
sin contar que la reutilización de clases y métodos en Java le facilita el
trabajo al programador.
• Patricio Salinas Caro y Nancy Histchfeld K. Tutorial UML [en-línea]
<http://www.dcc.vchile.cl/~salinas/uml/modelo,htm>

• Kevin Henry. JDBC - Conectividad de la Base de Datos de Java

• Hoffman. Tutorial de SQL -- http://w3.one.net/~jhoffman/sqltut.htm

• Java2, tutorial JDBC de javahispano (http://javahispano.org)

• Eclipse SDK version 3.1.2.( Generación de Javadoc.)

• Consultas sobre Javadoc.


<http://www.arrakis.es/~abelp/ApuntesJava/ComentariosDocumentacion.htm>

• Microsoft Office Visio Professionals 2003 SP2

• Consulta sobre manejo de métodos y variables de instancia.


<http://www.manual-java.com/manualjava/variables-metodos-
instancia.html>

Vous aimerez peut-être aussi