Advertisement
Guest User

pu pu putin

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