Foros del Web » Programación para mayores de 30 ;) » Java »

Representando dos tablas como objetos y relacionandolas

Estas en el tema de Representando dos tablas como objetos y relacionandolas en el foro de Java en Foros del Web. bueno amigos directamente mi problema es el siguiente: tengo dos tablas en mysql : alumno cursos -------- ---------- IdAlumno(integer 11) IdCurso(integer 11) nombre (varchar) IdAlumno(varchar) ...
  #1 (permalink)  
Antiguo 06/07/2006, 10:59
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
Representando dos tablas como objetos y relacionandolas

bueno amigos directamente mi problema es el siguiente:

tengo dos tablas en mysql :

alumno cursos
-------- ----------
IdAlumno(integer 11) IdCurso(integer 11)
nombre (varchar) IdAlumno(varchar)
apellidoPaterno(varchar) descripcion(varchar)
apellidoMaterno(varchar)
fechaRegistro(date)
horaRegistro(time)

como se aprecia un alumno puede tener muchos cursos , en ese nivel de simpleza.

bueno declaro mis dos clases :

alumno.java

package sdi.com.alumno;
import java.sql.*;

/**
*
* @author hermes patrick nuñez yaksetig
*/
public class alumno {


private int idAlumno;
private String facultad;
private String nombre;
private String apellidoPaterno;
private String apellidoMaterno;
private Date fechaRegistro;
private Time horaRegistro;

/** Constructor: Crea una nueva instancia de alumno */

public alumno() {
}

public void setIdAlumno(int valor){
this.idAlumno=valor;
}

public void setFacultad(String valor){
this.facultad=valor;
}

public void setNombre(String valor){
this.nombre=valor;
}

public void setApellidoPaterno(String valor){
this.apellidoPaterno=valor;
}

public void setApellidoMaterno(String valor){
this.apellidoMaterno=valor;
}

public void setFechaRegistro(Date valor){
this.fechaRegistro=valor;
}

public void setHoraRegistro(Time valor){
this.horaRegistro=valor;
}

public int getIdAlumno(){
return this.idAlumno;
}

public String getFacultad(){
return this.facultad;
}

public String getNombre(){
return this.nombre;
}

public String getApellidoPaterno(){
return this.apellidoPaterno;
}

public String getApellidoMaterno(){
return this.apellidoMaterno;
}

public Date getFechaRegistro(){
return this.fechaRegistro;
}

public Time getHoraRegistro(){
return this.horaRegistro;
}

}

y mi clase curso.java


package sdi.com.curso;
import java.sql.*;
import sdi.com.alumno.alumno;

/**
*
* @author hermes patrick nuñez yaksetig
*/
public class curso {


private int IdCurso;
private alumno oAlumno=null;
private String descripcion="-";

/** Constructor: Crea una nueva instancia de curso */

public curso() {
}

public void setIdCurso(int valor){
this.IdCurso=valor;
}

public void setAlumno(alumno oAlumno){
if (oAlumno!=null)
this.oAlumno=oAlumno;
}

public void setDescripcion(String valor){
this.descripcion=valor;
}

public int getIdCurso(){
return this.IdCurso;
}

public alumno getAlumno(){
return this.oAlumno;
}

public String getDescripcion(){
return this.descripcion;
}

}


Ahora.... yo estoy haciendo una clase controladora de alumno :

package sdi.com.alumno;

import java.sql.*;
import java.util.*;
import jdbc.*;

/**
*
* @author hermes patrick nuñez yaksetig
*/
public class controladorAlumno {



/** Constructor: Crea una nueva instancia de controladorAlumno */
private controladorAlumno() {
}

public static Vector listarAlumnos()throws Exception{
Vector lista = null;
alumno oAlumno = null;
Connection conexion = null;
Statement stmt = null;
String sql = null;
ResultSet resultados = null;
try{

conexion = ConexionMySQL.getConnection();

stmt = conexion.createStatement();
sql = "select * from alumno ";
resultados = stmt.executeQuery(sql);

if (resultados.next()){
lista = new Vector();
do{
oAlumno = new alumno();
oAlumno.setIdAlumno(resultados.getInt("IdAlumno")) ;
oAlumno.setNombre(resultados.getString("nombre"));
oAlumno.setApellidoPaterno(resultados.getString("a pellidoPaterno"));
oAlumno.setApellidoMaterno(resultados.getString("a pellidoMaterno"));


lista.add(oAlumno);
}while(resultados.next());
}
resultados.close();
stmt.close();
conexion.close();
} catch(Exception error){
System.out.println("Error en el método " +
"listaAlumnos() por: "+error.getMessage());
error.printStackTrace();
} finally{
try{
if (conexion!=null&&!conexion.isClosed())
conexion.close();
}catch(Exception excepcion){}
}
return lista;
}

public static String registrarAlumno(alumno oAlumno){
String mensaje="";
Connection con = null;
try{
int nroFilas=0;
String sql="INSERT INTO alumno(nombre, apellidoPaterno, apellidoMaterno,fechaRegistro,horaRegistro) " +
"VALUES(?,?,?,CURRENT_DATE,CURRENT_TIME)";
con = ConexionMySQL.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, oAlumno.getNombre());
pstmt.setString(2, oAlumno.getApellidoPaterno());
pstmt.setString(3, oAlumno.getApellidoMaterno());


nroFilas=pstmt.executeUpdate();
if (nroFilas>0)
mensaje="Registro exitoso";
else
mensaje="No se pudo registrar";
pstmt.close();
con.close();
}catch(Exception error){
mensaje = "Error en el registro del alumno por " +
error.getMessage();
error.printStackTrace();
} finally{
try{
if (con!=null&&!con.isClosed())
con.close();
}catch(Exception excepcion){}
}
return mensaje;
}
}


y una clase controladora de curso :

package sdi.com.curso;


import java.sql.*;
import java.util.*;
import jdbc.*;
import sdi.com.alumno.alumno;
/**
*
* @author hermes patrick nuñez yaksetig
*/
public class controladorCurso {

/** Creates a new instance of controladorCurso */
private controladorCurso() {
}

public static Vector listarCursos()throws Exception{
Vector lista=null;
curso oCurso=null;
Connection conexion=null;
Statement stmt=null;
String sql=null;
ResultSet resultados=null;

try{

conexion = ConexionMySQL.getConnection();

stmt = conexion.createStatement();
sql="select * from cursos";
resultados = stmt.executeQuery(sql);

if (resultados.next()){
lista = new Vector();
do{
oCurso = new curso();
oCurso.setIdCurso(resultados.getInt("IdCurso"));
oCurso.setAlumno(resultados.getAlumno("IdAlumno")) ;
oCurso.setDescripcion(resultados.getString("descri pcion"));

lista.add(oCurso);
}while(resultados.next());
}

resultados.close();
stmt.close();
conexion.close();
} catch(Exception error){
System.out.println("Error en el método " +
"listaCursos() por: "+error.getMessage());
error.printStackTrace();
} finally{
try{
if (conexion!=null&&!conexion.isClosed())
conexion.close();
}catch(Exception excepcion){}
}
return lista;

}

}


Es en esta clase controladora de curso donde viene mi problema pues si se aprecia bien es exactmente cuando recupero valores de la base de datos para meterlos en un objeto curso, donde radica el problema, como se ve primero creo instancio un nuevo curso, luego asigno el IdCurso correspondiente, y es despues de ello que me sale el error, es que no se como asignar al campo idAlumno, este campo viene a ser coo un (FK) de la tabla alumno sin embargop tiene que ser parte del objeto curso , diganme porfavor como hago pues es en esa linea de codigo donde me sale un error que dice "Cannot find simbol......
symbol: method getAlumno(java.Lang.String)
Location: interface java.sql.resultSet"

Como se vera es aki donde se establace una relacion entre las dos tablas pues un alumno puede tener uno o muchos cursos y bueno el problema , mi problema es comoo se relaciona en esa parte del codigo pues imagino que se hace en codigo ya quue mysql no tiene relaciones ... espero haber sido claro y poder recibir su ayuda mis colegas..gracias de antemano
__________________
Patrick:policia:
  #2 (permalink)  
Antiguo 06/07/2006, 13:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,

.- Las relaciones no te las mantiene automaticamente el JDBC/SQL a pelo, así que tendrás que mantenerla tú. Con esto quiero decir que no tendras en JDBC un método getAlumnos() que te devuelva los alumnos relacionados con el curso. JDBC es una interfaz sobre el SQL a pelo, así que no te transforma las tablas en objetos.

.- No has mostrado la tabla cursos, pero segun el modelo que explicas, la relacion Alumno-Curso sería N-M así que no entiendo que el objeto Curso tenga sólo un alumno, cuando lo normal es que pueda tener varios.

.- Para modelas las tablas como objetos, existen varias soluciones (Hibernate, EJB, JDO...) y estan construidas sobre JDBC, así que quizá te interesaría primero aprender la parte de JDBC y luego meterte en cosas más complejas. Según la prisa que tengas .

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.