Advertisement
alexusgracia

BD: Exercicis de repàs JDBC

Dec 17th, 2017
488
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.52 KB | None | 0 0
  1. /*PASSOS PREVIS: LLegir el contingut del fitxer PassosASeguir.txt (dins del zip del fitxer adjunt)
  2.  
  3. EXERCICI:
  4. Heu d'implementar el mètode Consulta de la classe CtrlDdadesPublic. Aquest mètode ha de:
  5. - Retornar una fila per cada dni de professor obtingut a partir dels paràmetres d'entrada. En cada fila hi ha d'haver el dni d'un professor i la quantitat d'assignacions del professor.
  6.  
  7. Cal tenir en compte que:
  8. - Els dni de professors en els paràmetres d'entrada s'hauran acabat quan es trobi el dni -999.
  9. - Cal que tingueu en compte que en Java per comparar strings s'ha d'usar els mètodes equals o compareTo de la classe String.
  10.  
  11. En cas que ocorri algun error, el mètode ha de llançar una excepció identificada amb el codi d'error que s'indica.
  12. 11: Error intern
  13.  
  14. Pel joc de proves públic el resultat que s'obtindrà és el següent:
  15. Dni Quantitat d'assignacions   
  16. 111 1
  17.  
  18. En el fitxer adjunt trobareu:
  19. - Els passos a seguir: (PassosASeguir.txt)
  20. - Les classes i mètodes per obtenir els paràmetres d'entrada: (MetodesAuxiliars.txt)
  21. - Les classes i mètodes per retornar el resultat i llençar excepcions: (MetodesAuxiliars.txt)
  22. - El projecte Eclipse que cal estendre. */
  23.  
  24. /*-----------------------*/
  25. /* Imports de la classe */
  26. import java.sql.*;
  27. /* Capa de Control de Dades */
  28. class CtrlDadesPublic extends CtrlDadesPrivat {
  29.     public ConjuntTuples consulta(Connection c, Tuple params) throws BDException {
  30.         ConjuntTuples ct = new ConjuntTuples();
  31.         try {
  32.             PreparedStatement ps = c.prepareStatement("SELECT p.dni, COUNT(a.dni) FROM "
  33.                     + "PROFESSORS p, ASSIGNACIONS a WHERE p.dni = a.dni AND "
  34.                     + "p.dni = ? GROUP BY p.dni;");
  35.             int i = 1;
  36.             String dni;
  37.             while(i <= params.tamany() && !(dni = params.consulta(i)).equals("-999")) {
  38.                 ps.setString(1, dni);
  39.                 ResultSet rs = ps.executeQuery();
  40.                 if(rs.next()) {
  41.                     Tuple t = new Tuple();
  42.                     t.afegir(rs.getString(1));
  43.                     t.afegir(rs.getString(2));
  44.                     ct.afegir(t);
  45.                 }
  46.                 i++;
  47.             }
  48.         } catch(SQLException sqle) {
  49.             throw new BDException(11);
  50.         }
  51.         return ct;
  52.     }
  53. }
  54.  
  55.  
  56.  
  57.  
  58. /*--------------------------------------------------------------------
  59. PASSOS PREVIS: LLegir el contingut del fitxer PassosASeguir.txt
  60.  
  61. EXERCICI:
  62. Heu d'implementar el mètode consulta. Aquest mètode ha de:
  63. Esborrar els despatxos del mòdul D que tenen una superfície inferior a S. Els paràmetres D i S es passaran en els paràmetres d'entrada del mètode consulta.
  64. Retornar una única fila amb la suma de les superfícies dels despatxos que queden a la base de dades després de la sentència d'esborrat. Si no en queda cap a la base de dades, en lloc d'un 0, ha de sortir "NO".
  65. Retornar per cada professor que hi ha a la base de dades que té alguna assignació finalitzada, el nom del professor i la quantitat d'assignacions finalitzades que té a despatxos.
  66.  
  67. Cal tenir en compte que:
  68. En les dades d'entrada només es passa un únic nom de mòdul i una superfície.
  69.  
  70. 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.
  71. 12: No hi ha cap despatx en el modul passat com a parametre amb superfície més petita que S .
  72. 13: Algun dels despatxos a esborrar té assignacions de professors i no es pot esborrar.
  73. 14: Error Intern
  74.  
  75. Pel joc de proves públic el contingut de la taula d'assignacions serà el següent:
  76. 20 
  77. Toni    1
  78.  
  79. En el fitxer adjunt trobareu:
  80. - Els passos a seguir: (PassosASeguir.txt)
  81. - La descripció del conjunt del programa Practica: (ProgramaPractica.pdf)
  82. - Les classes i mètodes per obtenir els paràmetres d'entrada: (MetodesAuxiliars.txt)
  83. - Les classes i mètodes per retornar el resultat i llençar excepcions: (MetodesAuxiliars.txt)
  84. - El projecte Eclipse que cal estendre.
  85. --------------------*/
  86.  
  87. /* Imports de la classe */
  88. import java.sql.*;
  89.  
  90. /* Capa de Control de Dades */
  91. class CtrlDadesPublic extends CtrlDadesPrivat {
  92.    
  93.     public ConjuntTuples consulta(Connection c, Tuple params) throws BDException {
  94.         ConjuntTuples ct = new ConjuntTuples();
  95.        
  96.         try{
  97.             String modul = params.consulta(1);
  98.             int superficie = Integer.parseInt(params.consulta(2));
  99.        
  100.             Statement s = c.createStatement();
  101.             int nDespatxos = s.executeUpdate("DELETE FROM DESPATXOS d "
  102.                     + "WHERE d.modul = '" + modul + "' AND "
  103.                             + "d.superficie < " + superficie + ";");
  104.            
  105.             if(nDespatxos == 0) throw new BDException(12);
  106.            
  107.             ResultSet rs = s.executeQuery("SELECT SUM(D.superficie) FROM "
  108.                     + "DESPATXOS D;");
  109.            
  110.             rs.next();
  111.             int superficieRestant = rs.getInt(1);
  112.            
  113.             Tuple t = new Tuple();
  114.             if(rs.wasNull()){
  115.                 t.afegir("NO");
  116.             } else {
  117.                 t.afegir("" + superficieRestant);
  118.             }
  119.            
  120.             ct.afegir(t);
  121.            
  122.             ResultSet profAssig = s.executeQuery("SELECT p.nomProf, COUNT(*) "
  123.                     + "FROM professors p, assignacions a "
  124.                     + "WHERE p.dni = a.dni AND a.instantFi IS NOT NULL "
  125.                     + "GROUP BY p.nomProf;");
  126.            
  127.             while(profAssig.next()){
  128.                 Tuple t1 = new Tuple();
  129.                 t1.afegir(profAssig.getString(1));
  130.                 t1.afegir(profAssig.getString(2));
  131.                 ct.afegir(t1);
  132.             }
  133.            
  134.             s.close();
  135.         } catch(SQLException e){
  136.             //System.out.println(e.getMessage());
  137.             if(e.getSQLState().equals("23503")) throw new BDException(13);
  138.             throw new BDException(14);
  139.         }
  140.        
  141.         return ct;
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement