Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*PASSOS PREVIS: LLegir el contingut del fitxer PassosASeguir.txt
- EXERCICI:
- Heu d'implementar el mètode consulta. Aquest mètode ha d'obtenir per cada professor de la base de dades, el dni del professor, i el mòdul i número de l'últim despatx en què ha estat assignat.
- Cal tenir en compte que:
- - Si un professor té una assignació amb instantFi nul, això vol dir que aquesta és la seva assignació actual, i per tant l'última del professor.
- - En qualsevol altre cas la darrera assignació d'un professor és la que té un instantFi més gran.
- - Mai hi haurà dues assignacions d'un mateix professor en un mateix instant.
- - Si un professor no té cap assignació, s'haurà de posar "XXX" com a mòdul i "YYY" com a número de despatx.
- En cas que s'identifiqui una de les situacions següents, el mètode ha de llançar una excepció identificada amb el codi d'error que s'indica.
- 10: No hi ha cap professor
- 11: Error intern
- Pel joc de proves públic el resultat que s'obtindrà és el següent:
- 111 Omega 128
- 222 Omega 118
- En el fitxer adjunt trobareu:
- - Els passos a seguir: (PassosASeguir.txt)
- - La descripció del conjunt del programa Practica: (ProgramaPractica.pdf)
- - Les classes i mètodes per obtenir els paràmetres d'entrada: (MetodesAuxiliars.txt)
- - Les classes i mètodes per retornar el resultat i llençar excepcions: (MetodesAuxiliars.txt)
- - El projecte Eclipse que cal estendre.
- ---------------------------------------------*/
- /* Imports de la classe */
- import java.sql.*;
- /* Capa de Control de Dades */
- class CtrlDadesPublic extends CtrlDadesPrivat {
- public ConjuntTuples consulta(Connection c, Tuple params) throws BDException {
- ConjuntTuples ct = new ConjuntTuples();
- try {
- Statement s1 = c.createStatement();
- ResultSet dnis = s1.executeQuery("SELECT dni FROM PROFESSORS");
- PreparedStatement s2 = c.prepareStatement("SELECT a.dni, a.modul, a.numero, a.instantInici FROM PROFESSORS p, ASSIGNACIONS a "
- + "WHERE p.dni = a.dni AND p.dni = ? AND a.instantFi IS NULL;");
- PreparedStatement s3 = c.prepareStatement("SELECT a.dni, a.modul, a.numero FROM PROFESSORS p, ASSIGNACIONS a "
- + "WHERE a.dni = p.dni AND a.dni = ? AND a.instantFi = (SELECT max(a2.instantFi) FROM ASSIGNACIONS a2 WHERE a2.dni = a.dni);");
- int countProfs = 0;
- while(dnis.next()) {
- String dni = dnis.getString(1);
- s2.setString(1, dni);
- ResultSet instantFiNuls = s2.executeQuery();
- String modul = "XXX";
- String numero = "YYY";
- Tuple t = new Tuple(); //Init to avoid null tuple
- t.afegir(dni);
- t.afegir(modul);
- t.afegir(numero);
- boolean anyNull = false;
- int maxInstInici = -1;
- while(instantFiNuls.next()) {
- int instantInici = instantFiNuls.getInt(4);
- if(instantInici > maxInstInici) {
- t = new Tuple();
- t.afegir(instantFiNuls.getString(1));
- t.afegir(instantFiNuls.getString(2));
- t.afegir(instantFiNuls.getString(3));
- maxInstInici = instantInici;
- }
- anyNull = true;
- }
- if(!anyNull) {
- s3.setString(1, dni);
- ResultSet maxInstantFi = s3.executeQuery();
- if(maxInstantFi.next()) {
- t = new Tuple();
- t.afegir(maxInstantFi.getString(1));
- t.afegir(maxInstantFi.getString(2));
- t.afegir(maxInstantFi.getString(3));
- }
- }
- ct.afegir(t);
- countProfs++;
- }
- s1.close();
- if(countProfs == 0) throw new BDException(10);
- } catch(SQLException sqle) {
- //sqle.printStackTrace();
- throw new BDException(11);
- }
- return ct;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement