Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class DB {
- /* conn serve per "memorizzare" la connessione verso la base di dati */
- private Connection conn;
- private Statement stmt;
- /*
- * Costruttore
- */
- public DB(){
- /* Registrazione driver */
- try {
- Class.forName("oracle.jdbc.driver.OracleDriver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- System.err.println(". . . Error in loading the driver . . .");
- }
- /* Fine registrazione driver */
- }
- /*
- * Metodo che apre la connessione con la base di dati.
- * Ritorna true se la connessione viene aperta con successo, false altrimenti.
- */
- public boolean OpenConnection(){
- try {
- conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "SYSTEM", "admin");
- return true;
- } catch(Exception ex) {
- ex.printStackTrace();
- System.err.println(". . . Connection Error . . .");
- return false;
- }
- }
- /*
- * Questo metodo riceve in ingresso il codice di un cliente e
- * ritorna i dati di tale cliente sottoforma di stringa.
- * Praticamente la stringa restituita e' una concatenazione dei nomi
- * degli attributi e dei suoi valori.
- * Se ad esempio il cliente selezionato si chiama Paolo Garza, ha come indirizzo
- * "Via Inesistente 24, Torino"
- * e come numero di cellulare 0110907022 allora il metodo deve restituire
- * la stringa "Nome: Paolo\nCognome: Garza\nIndirizzo: Via Inesistente 24, Torino\nCell: 0110907022"
- */
- public String ottieniDatiCliente(long codice_cliente) {
- String dati=null, str = null;
- ResultSet res;
- String query = new String("SELECT * " +
- "FROM CLIENTE " +
- "WHERE CodiceCliente = " + codice_cliente);
- try {
- stmt = conn.createStatement();
- res = stmt.executeQuery(query);
- int row = 0;
- while(res.next())
- {
- dati += res.getString("CodiceCliente");
- dati += res.getString("Nome");
- dati += res.getString("Cognome");
- dati += res.getString("Indirizzo");
- if((str = new String(res.getString("Cell"))) != null)
- dati += str;
- row ++;
- }
- if(row == 0)
- {
- /* Se il cliente non esiste restituisco un messaggio d'errore */
- dati=new String("Cliente inesistente");
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- //close the 2 objects
- try{
- stmt.close();
- res.close();
- }catch(Exception e){
- e.printStackTrace();
- }
- return dati;
- }
- /*
- * Questo metodo ritorna una lista di stringhe. Ogni stringa contiene
- * il nome di un corso. La lista di stringhe restituite corrisponde
- * all'elenco di corsi cui e' iscritto il cliente con codice pari
- * a quello presente nel parametro codice_cliente di questo metodo
- */
- public List<String> ottieniCorsiCliente(long codice_cliente) {
- List<String> list=new LinkedList<String>();
- ResultSet res;
- String query = new String("SELECT NomeC " +
- "FROM ISCRITTO_CORSO IS, CORSO C " +
- "WHERE IS.CodiceCliente = "+ codice_cliente + " " +
- "AND IS.CodiceCorso = C.CodCorso");
- try {
- stmt = conn.createStatement();
- res = stmt.executeQuery(query);
- while(res.next()){
- list.add(res.getString(1));
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- //close
- try{
- stmt.close();
- res.close();
- }catch(Exception e){
- e.printStackTrace();
- }
- return list;
- }
- /*
- * Il metodo ritorna una lista di stringhe con dentro il codice dei corsi
- * per cui c'e' ancora almeno un posto libero e i rispettivi nomi. Ogni stringa
- * della lista restituita corrisponde ad un singolo corso e deve
- * essere formattata usando il formato codice_corso - nome_corso
- */
- public List<String> ottieniCodiciCorsi() {
- List<String> list=new LinkedList<String>();
- Statement stmt;
- ResultSet res;
- String query = new String("SELECT CodCorso, NomeC " +
- "FROM CORSO " +
- "WHERE PostiDisponibili > 0 ");
- try {
- stmt = conn.createStatement();
- res = stmt.executeQuery(query);
- while (res.next()) {
- list.add(res.getString("CodCorso") + " - " + res.getString("NomeCorso"));
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- //close
- try {
- stmt.close();
- res.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return list;
- }
- /*
- * Questo metodo riceve in ingresso (parametri di input) il codice di un corso
- * e il codice di un cliente e iscrive il cliente al corso (ossia
- * aggiunge una nuova iscrizione nella base di dati). L'iscrizione
- * consiste nell'inserimento della tupla appropriata nella tabella iscritto_corso.
- *
- * Una volta aggiunta l'iscrizione nella tabella iscritto_corso, il metodo
- * viene aggiornare (decrementandolo di uno) il valore dei posti disponibili
- * per il corso indicato in codCorso (praticamente di deve eseguire un'istruzione
- * SQL di aggiornamento che vada a decrementare di uno il valore del
- * campo corso.postidisponibili per il corso per cui si e' appena effettuata
- * l'iscrizione).
- *
- * Il metodo ritorna true se l'iscrizione e' avvenuta correttamente, false altrimenti.
- */
- public boolean aggiungiIscrizione(long codCorso,long codCliente){
- String queryInsert = new String("INSERT INTO ISCRITTO_CORSO (CodiceCliente, CodiceCorso, DataIscrizione) " +
- "VALUES (" +codCorso + ", " + codCliente + ", TO_DATE('1/06/2017', 'DD/MM/YYYY')) ");
- String queryUpdate = new String("UPDATE CORSO " +
- "SET PostiDisponibili = PostiDisponibili - 1 " +
- "WHERE CodCorso = " + codCorso);
- String queryCheckFreeSpot = new String("SELECT PostiDisponibili " +
- "FROM CORSO " +
- "WHERE CodCorso = " + codCorso);
- try {
- /* Inserire il codice necessario per
- * 1 - inserire la nuova tupla nella tabella iscritto_corso, ossia quella relativa
- * all'iscrizione del cliente con codice codCliente al corso con codice codCorso
- * 2 - aggiornare il numero di posti disponibili (attributo corso.postidisponibili)
- * per il corso con codice pari a codCorso.
- *
- * Fare attenzione che le due operazioni devono andare entrambe a buon fine,
- * oppure essere annullate entrambe se una delle due fallisce (vedere
- * i lucidi sulla gestione delle le transazioni in JDBC)
- * */
- conn.setAutoCommit(false);
- stmt = conn.createStatement();
- if(stmt.executeQuery(queryCheckFreeSpot).getInt(1) <= 0)
- {
- Exception e = new Exception();
- throw e;
- }
- stmt.executeQuery(queryInsert);
- stmt.executeQuery(queryUpdate);
- conn.commit();
- conn.setAutoCommit(true);
- stmt.close();
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- try {
- conn.rollback();
- conn.setAutoCommit(true);
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- return false;
- }
- }
- /*
- * Questo metodo chiude la connessione con il DB
- */
- public void CloseConnection(){
- try {
- conn.close();
- } catch (Exception e) {
- System.err.println("Errore nel chiudere la connessione con il DB!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement