Advertisement
Guest User

Untitled

a guest
Jun 12th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.26 KB | None | 0 0
  1. public class DB {
  2.    
  3.     /* conn serve per "memorizzare" la connessione verso la base di dati */
  4.     private Connection conn;
  5.     private Statement stmt;
  6.    
  7.     /*
  8.      * Costruttore
  9.      */
  10.     public DB(){
  11.         /* Registrazione driver */
  12.         try {
  13.            
  14.             Class.forName("oracle.jdbc.driver.OracleDriver");
  15.            
  16.         } catch (ClassNotFoundException e) {
  17.            
  18.             e.printStackTrace();
  19.             System.err.println(". . . Error in loading the driver . . .");
  20.        
  21.         }
  22.        
  23.         /* Fine registrazione driver */
  24.     }
  25.    
  26.    
  27.     /*
  28.      * Metodo che apre la connessione con la base di dati.
  29.      * Ritorna true se la connessione viene aperta con successo, false altrimenti.
  30.      */
  31.     public boolean OpenConnection(){
  32.         try {
  33.  
  34.             conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "SYSTEM", "admin");
  35.            
  36.             return true;
  37.            
  38.         } catch(Exception ex) {
  39.             ex.printStackTrace();
  40.             System.err.println(". . . Connection Error . . .");
  41.            
  42.             return false;
  43.         }
  44.  
  45.     }
  46.    
  47.  
  48.    
  49.     /*
  50.      * Questo metodo riceve in ingresso il codice di un cliente e
  51.      * ritorna i dati di tale cliente sottoforma di stringa.
  52.      * Praticamente la stringa restituita e' una concatenazione dei nomi
  53.      * degli attributi e dei suoi valori.
  54.      * Se ad esempio il cliente selezionato si chiama Paolo Garza, ha come indirizzo
  55.      * "Via Inesistente 24, Torino"
  56.      * e come numero di cellulare 0110907022 allora il metodo deve restituire
  57.      * la stringa "Nome: Paolo\nCognome: Garza\nIndirizzo: Via Inesistente 24, Torino\nCell: 0110907022"
  58.      */
  59.     public String ottieniDatiCliente(long codice_cliente) {
  60.        
  61.         String dati=null, str = null;
  62.         ResultSet res;
  63.         String query = new String("SELECT * " +
  64.                                   "FROM CLIENTE " +
  65.                                   "WHERE CodiceCliente = " + codice_cliente);
  66.        
  67.        
  68.         try {
  69.  
  70.             stmt = conn.createStatement();
  71.             res = stmt.executeQuery(query);
  72.            
  73.             int row = 0;
  74.             while(res.next())
  75.             {
  76.                 dati += res.getString("CodiceCliente");
  77.                 dati += res.getString("Nome");
  78.                 dati += res.getString("Cognome");
  79.                 dati += res.getString("Indirizzo");
  80.                 if((str = new String(res.getString("Cell"))) != null)
  81.                     dati += str;
  82.                 row ++;
  83.             }
  84.             if(row == 0)
  85.             {
  86.                 /* Se il cliente non esiste restituisco un messaggio d'errore */
  87.                 dati=new String("Cliente inesistente");
  88.             }
  89.            
  90.         } catch (Exception e) {
  91.             e.printStackTrace();
  92.             return null;
  93.         }
  94.        
  95.         //close the 2 objects
  96.         try{
  97.             stmt.close();
  98.             res.close();
  99.         }catch(Exception e){
  100.             e.printStackTrace();
  101.         }
  102.        
  103.         return dati;
  104.        
  105.     }
  106.    
  107.    
  108.    
  109.     /*
  110.      * Questo metodo ritorna una lista di stringhe. Ogni stringa contiene
  111.      * il nome di un corso. La lista di stringhe restituite corrisponde
  112.      * all'elenco di corsi cui e' iscritto il cliente con codice pari
  113.      * a quello presente nel parametro codice_cliente di questo metodo
  114.      */
  115.     public List<String> ottieniCorsiCliente(long codice_cliente) {
  116.         List<String> list=new LinkedList<String>();
  117.         ResultSet res;
  118.         String query = new String("SELECT NomeC " +
  119.                                   "FROM ISCRITTO_CORSO IS, CORSO C " +
  120.                                   "WHERE IS.CodiceCliente = "+ codice_cliente + " " +
  121.                                   "AND IS.CodiceCorso = C.CodCorso");
  122.        
  123.         try {
  124.            
  125.             stmt = conn.createStatement();
  126.             res = stmt.executeQuery(query);
  127.            
  128.             while(res.next()){
  129.                 list.add(res.getString(1));
  130.             }
  131.  
  132.         } catch (Exception e) {
  133.             e.printStackTrace();
  134.             return null;
  135.         }
  136.        
  137.         //close
  138.         try{
  139.             stmt.close();
  140.             res.close();
  141.         }catch(Exception e){
  142.             e.printStackTrace();
  143.         }
  144.  
  145.         return list;
  146.     }
  147.    
  148.    
  149.    
  150.     /*
  151.      * Il metodo ritorna una lista di stringhe con dentro il codice dei corsi
  152.      * per cui c'e' ancora almeno un posto libero e i rispettivi nomi. Ogni stringa
  153.      * della lista restituita corrisponde ad un singolo corso e deve
  154.      * essere formattata usando il formato codice_corso - nome_corso
  155.      */
  156.     public List<String> ottieniCodiciCorsi() {
  157.         List<String> list=new LinkedList<String>();
  158.         Statement stmt;
  159.         ResultSet res;
  160.         String query = new String("SELECT CodCorso, NomeC " +
  161.                                   "FROM CORSO " +
  162.                                   "WHERE PostiDisponibili > 0 ");
  163.  
  164.         try {
  165.             stmt = conn.createStatement();
  166.             res = stmt.executeQuery(query);
  167.             while (res.next()) {
  168.                 list.add(res.getString("CodCorso") + " - " + res.getString("NomeCorso"));
  169.             }          
  170.            
  171.         } catch (Exception e) {
  172.             e.printStackTrace();
  173.             return null;
  174.         }
  175.        
  176.         //close
  177.         try {
  178.             stmt.close();
  179.             res.close();
  180.         } catch (Exception e) {
  181.             e.printStackTrace();
  182.         }
  183.  
  184.         return list;
  185.     }
  186.    
  187.    
  188.    
  189.     /*
  190.      * Questo metodo riceve in ingresso (parametri di input) il codice di un corso
  191.      * e il codice di un cliente e iscrive il cliente al corso (ossia
  192.      * aggiunge una nuova iscrizione nella base di dati). L'iscrizione
  193.      * consiste nell'inserimento della tupla appropriata nella tabella iscritto_corso.
  194.      *
  195.      * Una volta aggiunta l'iscrizione nella tabella iscritto_corso, il metodo
  196.      * viene aggiornare (decrementandolo di uno) il valore dei posti disponibili
  197.      * per il corso indicato in codCorso (praticamente di deve eseguire un'istruzione
  198.      * SQL di aggiornamento che vada a decrementare di uno il valore del
  199.      * campo corso.postidisponibili per il corso per cui si e' appena effettuata
  200.      * l'iscrizione).
  201.      *
  202.      * Il metodo ritorna true se l'iscrizione e' avvenuta correttamente, false altrimenti.
  203.      */
  204.     public boolean aggiungiIscrizione(long codCorso,long codCliente){
  205.         String queryInsert = new String("INSERT INTO ISCRITTO_CORSO (CodiceCliente, CodiceCorso, DataIscrizione) " +
  206.                                         "VALUES (" +codCorso + ", " + codCliente + ", TO_DATE('1/06/2017', 'DD/MM/YYYY')) ");
  207.         String queryUpdate = new String("UPDATE CORSO " +
  208.                                         "SET PostiDisponibili = PostiDisponibili - 1 " +
  209.                                         "WHERE CodCorso = " + codCorso);
  210.         String queryCheckFreeSpot  = new String("SELECT PostiDisponibili " +
  211.                                                 "FROM CORSO " +
  212.                                                 "WHERE CodCorso = " + codCorso);
  213.         try {
  214.                 /* Inserire il codice necessario per
  215.                  * 1 - inserire la nuova tupla nella tabella iscritto_corso, ossia quella relativa
  216.                  *     all'iscrizione del cliente con codice codCliente al corso con codice codCorso  
  217.                  * 2 - aggiornare il numero di posti disponibili (attributo corso.postidisponibili)
  218.                  *     per il corso con codice pari a codCorso.
  219.                  *    
  220.                  * Fare attenzione che le due operazioni devono andare entrambe a buon fine,
  221.                  * oppure essere annullate entrambe se una delle due fallisce (vedere
  222.                  * i lucidi sulla gestione delle le transazioni in JDBC)
  223.                  * */
  224.             conn.setAutoCommit(false);
  225.             stmt = conn.createStatement();
  226.            
  227.             if(stmt.executeQuery(queryCheckFreeSpot).getInt(1) <= 0)
  228.             {
  229.                 Exception e = new Exception();
  230.                 throw e;
  231.             }
  232.  
  233.                
  234.             stmt.executeQuery(queryInsert);
  235.             stmt.executeQuery(queryUpdate);
  236.             conn.commit();
  237.            
  238.             conn.setAutoCommit(true);
  239.             stmt.close();
  240.            
  241.             return true;
  242.         } catch (Exception e) {
  243.                 e.printStackTrace();
  244.                
  245.                 try {
  246.                     conn.rollback();
  247.                     conn.setAutoCommit(true);
  248.                 } catch (SQLException e1) {
  249.                     e1.printStackTrace();
  250.                 }
  251.                
  252.                 return false;
  253.         }
  254.        
  255.     }
  256.    
  257.    
  258.     /*
  259.      * Questo metodo chiude la connessione con il DB
  260.      */
  261.     public void CloseConnection(){
  262.         try {
  263.            
  264.             conn.close();
  265.            
  266.         } catch (Exception e) {
  267.             System.err.println("Errore nel chiudere la connessione con il DB!");
  268.         }
  269.     }
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement