Advertisement
alexusgracia

BD: Nou exercici de JDBC

Dec 17th, 2017
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.52 KB | None | 0 0
  1. /*PASSOS PREVIS: LLegir el contingut del fitxer PassosASeguir.txt
  2.  
  3. EXERCICI:
  4. 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.
  5.  
  6. Cal tenir en compte que:
  7. - 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.
  8. - En qualsevol altre cas la darrera assignació d'un professor és la que té un instantFi més gran.
  9. - Mai hi haurà dues assignacions d'un mateix professor en un mateix instant.
  10. - Si un professor no té cap assignació, s'haurà de posar "XXX" com a mòdul i "YYY" com a número de despatx.
  11.  
  12. 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.
  13. 10: No hi ha cap professor
  14. 11: Error intern
  15.  
  16. Pel joc de proves públic el resultat que s'obtindrà és el següent:
  17. 111 Omega 128
  18. 222 Omega 118
  19.  
  20. En el fitxer adjunt trobareu:
  21. - Els passos a seguir: (PassosASeguir.txt)
  22. - La descripció del conjunt del programa Practica: (ProgramaPractica.pdf)
  23. - Les classes i mètodes per obtenir els paràmetres d'entrada: (MetodesAuxiliars.txt)
  24. - Les classes i mètodes per retornar el resultat i llençar excepcions: (MetodesAuxiliars.txt)
  25. - El projecte Eclipse que cal estendre.
  26.  
  27. ---------------------------------------------*/
  28.  
  29. /* Imports de la classe */
  30. import java.sql.*;
  31. /* Capa de Control de Dades */
  32. class CtrlDadesPublic extends CtrlDadesPrivat {
  33.     public ConjuntTuples consulta(Connection c, Tuple params) throws BDException {
  34.         ConjuntTuples ct = new ConjuntTuples();
  35.         try {
  36.             Statement s1 = c.createStatement();
  37.             ResultSet dnis = s1.executeQuery("SELECT dni FROM PROFESSORS");
  38.             PreparedStatement s2 = c.prepareStatement("SELECT a.dni, a.modul, a.numero, a.instantInici FROM PROFESSORS p, ASSIGNACIONS a "
  39.                     + "WHERE p.dni = a.dni AND p.dni = ? AND a.instantFi IS NULL;");
  40.             PreparedStatement s3 = c.prepareStatement("SELECT a.dni, a.modul, a.numero FROM PROFESSORS p, ASSIGNACIONS a "
  41.                     + "WHERE a.dni = p.dni AND a.dni = ? AND a.instantFi = (SELECT max(a2.instantFi) FROM ASSIGNACIONS a2 WHERE a2.dni = a.dni);");
  42.             int countProfs = 0;
  43.             while(dnis.next()) {
  44.                 String dni = dnis.getString(1);
  45.                 s2.setString(1, dni);
  46.                 ResultSet instantFiNuls = s2.executeQuery();
  47.                 String modul = "XXX";
  48.                 String numero = "YYY";
  49.                 Tuple t = new Tuple(); //Init to avoid null tuple
  50.                 t.afegir(dni);
  51.                 t.afegir(modul);
  52.                 t.afegir(numero);
  53.                 boolean anyNull = false;
  54.                 int maxInstInici = -1;
  55.                 while(instantFiNuls.next()) {
  56.                     int instantInici = instantFiNuls.getInt(4);
  57.                     if(instantInici > maxInstInici) {
  58.                         t = new Tuple();
  59.                         t.afegir(instantFiNuls.getString(1));
  60.                         t.afegir(instantFiNuls.getString(2));
  61.                         t.afegir(instantFiNuls.getString(3));
  62.                         maxInstInici = instantInici;
  63.                     }
  64.                     anyNull = true;
  65.                 }
  66.                 if(!anyNull) {
  67.                     s3.setString(1, dni);
  68.                     ResultSet maxInstantFi = s3.executeQuery();                    
  69.                     if(maxInstantFi.next()) {
  70.                         t = new Tuple();
  71.                         t.afegir(maxInstantFi.getString(1));
  72.                         t.afegir(maxInstantFi.getString(2));
  73.                         t.afegir(maxInstantFi.getString(3));
  74.                     }
  75.                 }
  76.                 ct.afegir(t);
  77.                 countProfs++;
  78.             }  
  79.             s1.close();
  80.             if(countProfs == 0) throw new BDException(10);
  81.         } catch(SQLException sqle) {
  82.             //sqle.printStackTrace();
  83.             throw new BDException(11);
  84.         }
  85.         return ct;
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement