Menu


Trascrizione diapositive

1. Gestione dei database

  • Guida rapida alla gestione dei database di MySQL con Java.


2. Cos’è MySQL?

  • «MySQL» detto anche «Oracle Mysql» è un database relazionale «RDBMS», che è composto da un client e da un server.
  • Il client consente principalmente di creare, modificare, eliminare un elemento o una tabella presente nella macchina server, che si occuperà di gestire la richiesta.
  • Poiché ogni tipo di dato può essere memorizzato in un database, «MySQL» viene usato praticamente ovunque ci sia bisogno di immagazzinare dati, pensiamo ai referti medici, alle transazioni bancarie, alle informazioni su raccolte di musica e video, la rubrica del telefonino e molto altro ancora!


3. Storia di MySQL

  • La storia di «MySQL» ha inizio nel Luglio 2007, quando la società svedese MySQL AB lanciò il marchio «MySQL» in tutto il mondo; I principali introiti dell’azienda provenivano dalle licenze commerciali di «MySQL», derivate dell’edizione Enterprise di tale prodotto.
  • Nel Gennaio 2008 la Sun Microsystems ha assorbito MySQL AB, circa un anno dopo la stessa Sun Microsystems è stata acquistata da parte di Oracle per 7,4 miliardi di dollari; L’accordo tra le parti, approvato dall’antitrust USA, è poi passato al vaglio degli organi corrispondenti dell’Unione Europea, preoccupati dal conflitto d’interessi costituito dai database commerciali Oracle rispetto a «MySQL», che era fornito anche in versione gratuita; nonostante tutto l’Unione Europea diede parere favorevole.


4. Struttura di un database

  • In un sistema di database non relazionale tutte le informazioni vengono memorizzate in un’unica tabella, questo implica non poca difficoltà nella gestione dei dati immessi, per non parlare dell’insita complessità dell’estrapolazione delle informazioni.
  • «MySQL» come precedentemente affermato è un database relazionale, pertanto sarà possibile separare le informazioni in singole tabelle o gruppi di informazioni omogenee.
  • Ogni tabella ha dei campi separati che rappresentano l’informazione.
  • Ad esempio, un campo potrebbe contenere il nome di un cliente, un altro il suo cognome, ed un altro ancora potrebbe servire per memorizzare il sesso; ogni campo potrà contenere tipi di dato diverso come testo, numeri, date e così via…


5. Strutture collegate

  • S’immagini di voler riprodurre la rubrica del proprio telefono cellulare in «MySQL».
  • In primo luogo sarà necessario creare una tabella che includa i campi: nome dell’abbonato, cognome, sesso e codice identificativo*.
  • In secondo luogo sarà necessario generare un’altra tabella che dovrà contenere il codice identificativo del numero in rubrica**, il codice identificativo dell’abbonato ed il numero di telefono.
  • Il campo comune sarà il codice identificativo dell’abbonato e le informazioni memorizzate nelle due tabelle saranno collegate attraverso i campi il cui codice identificativo dell’abbonato è lo stesso. Questa tecnica ci permette di associare ad ogni singolo abbonato infiniti numeri di telefono e di visualizzare facilmente tutte le informazioni di cui si ha bisogno.

  • * Il codice identificativo è univoco per ogni abbonato aggiunto - chiave primaria.
    ** Il codice identificativo è univoco per ogni numero aggiunto - chiave primaria.


6. Tipi di campo

  • Di seguito sono mostrati alcuni dei tipi di campo possibili:

Tipo di campo

Descrizione

Esempio

CHAR (LUNGHEZZA)

Ogni dato basato su caratteri può essere memorizzato in questo campo, che però deve avere una lunghezza fissa.

Il codice fiscale deve avere di norma 16 caratteri, quindi si impiegherà: «char(16)».

VARCHAR (LUNGHEZZA)

Qualsiasi dato basato su caratteri con lunghezza variabile.
Il parametro lunghezzapuò variare da «0» a «255» caratteri.

Il nome dell’abbonato può essere memorizzato in un «varchar(20)»; dove «20» indica la lunghezza massima del campo.

INT (LUNGHEZZA)

Possono essere memorizzati in questo campo solo numeri interi compresi tra:
«-2.147.483.648» e
«+2.147.483.647».
Il parametro lunghezza limita il numero di cifre visualizzate ma non il valore.

Numero di pezzi in magazzino di un determinato prodotto.



7. Tipi di campo


Tipo di campo

Descrizione

Esempio

INT (LUNGHEZZA) UNSIGNED

Possono essere memorizzati in questo campo solo numeri interi da «0» a «+4.294.967.295».
Il parametro lunghezza limita il numero di cifre visualizzate ma non il valore.

Codice identificativo dell’abbonato (se composto da soli numeri)

TEXT

Ogni dato basato su caratteri può essere memorizzato in questo campo, che però deve avere una dimensione massima di «65.536» caratteri.

Campo per memorizzare una recensione relativa ad un prodotto.

DECIMAL (LUNGHEZZA, DEC)

Campo numerico che può memorizzare numeri decimali.
Il parametro lunghezza limita il numero di cifre visualizzate, mentre dec limita il numero di decimali che possono essere memorizzati.

Campo per memorizzare il prezzo relativo ad un prodotto.



8. Tipi di campo


Tipo di campo

Descrizione

Esempio

ENUM ("OPZIONE1", "OPZIONE2", …)

Permette di memorizzare solo certi valori prestabiliti.
I parametri opzione* permettono di
specificare la lista di tutti gli stati possibili.

Lista di tutte le possibili province o città d’Italia.

DATE

Ogni dato basato su una data può essere memorizzato in questo campo, però il formato dovrà essere di tipo «YYYY-MM-DD».

Campo per memorizzare la data dell’ordine relativo ad un prodotto.

TIME

Ogni dato basato su un orario può essere memorizzato in questo campo, in ogni caso il formato dovrà essere di tipo «hh:mm:ss».

Campo per memorizzare l’orario di un avvenimento.

DATETIME

Campo che permette di memorizzare assieme una data e un orario, nel formato
«YYYY-MM-DD hh:mm:ss».

Data e ora di un appuntamento in agenda.



9. Tipi di campo


Tipo di campo

Descrizione

Esempio

YEAR (LUNGHEZZA)

Permette di memorizzare un dato basato su un anno.
Il parametro lunghezza permette di
specificare il formato (che può essere anche a due cifre: «YY»).

Aggiornare in un colpo solo l’anno del copyright di un software o sito web.

BLOB

Ogni dato basato su caratteri può essere memorizzato in questo campo, che però deve avere una dimensione massima di «65.536» caratteri. A differenza di un campo TEXT, BLOB distingue tra le maiuscole e le minuscole durante l’ordinamento e il confronto.

Campo per memorizzare un commento relativo ad un prodotto.


In «MySQL» ci sono molti altri tipi di campo, in caso di particolari esigenze è consigliabile consultare il sito web www.mysql.it per ottenere la lista completa.


10. NULL/NOT NULL

  • Ogni campo dichiarato in «MySQL» deve essere di tipo «NULL» o «NOT NULL».
  • L’opzione «NULL» comunica al database che il campo potrà essere vuoto, diversamente «NOT NULL» ci costringerà in fase di immissione dei dati a riempire il campo.
  • ATTENZIONE: Il numero «0» è diverso da «NULL», il valore «0» significa nulla in termini di quantità ma non in termini di dato.
    Se inserite uno «0» in un campo definito come «NOT NULL»: «MySQL» inserirà uno «0» anziché produrre un errore.


11. Indici

  • S’immagini di voler ricercare un film presente in una videoteca che conta 50.000 DVD, «MySQL» inizierà la ricerca partendo dalla prima riga, cosa succederebbe se il film si trovasse verso la fine? Mettiamoci comodi giacché ci vorrà tantissimo tempo.
  • Per velocizzare la ricerca potremo organizzare un elenco raggruppando i film per anno, per genere e per data d’uscita; dove anno, genere e data d’uscita saranno indici del nostro database, in questo modo sarà possibile saltare alla posizione approssimata dei dati e trovare l’elemento in minor tempo.
  • Pertanto se un database digitale permette di ricercare e trovare prima un determinato elemento, per velocizzare ulteriormente il processo di ricerca si utilizzano gli indici chiamati anche chiavi.
  • «MySQL» richiede almeno una chiave per ogni tabella, di cui almeno una dovrà essere primaria (in modo tale da tenere tutti i dati ben separati).
  • Ad esempio, il codice identificativo di un abbonato (osserva: Strutture collegate) è già un primo importante esempio di chiave primaria. Infatti, si potrebbero facilmente avere due persone in rubrica con lo stesso nome e cognome, per questo serve un modo per indicarne la differenza.
  • Inoltre, un indice deve essere applicato ad campo di tipo «NOT NULL» e/o «UNIQUE», quando il parametro «UNIQUE» è specificato, «MySQL» non permetterà che vi siano  duplicati per questo campo.


12. Auto incremento

  • Se vogliamo che un determinato campo della nostra tabella si auto incrementi è possibile usare il comando «auto_increment» quando si crea la tabella.
  • La funzione di auto incremento può essere molto utile quando utilizziamo un campo che funge da codice identificativo, dato che ad ogni nuovo elemento aggiunto sarà assegnato un valore incrementale, nuovo e univoco.
  • Inoltre, se non si vuole cominciare dal numero uno, è possibile determinare da quale numero iniziare la conta.


13. Storage Engine

  • Ogni dato presente in un database è inserito in una tabella che può avere diverse caratteristiche tecniche; Pertanto è bene precisare che ogni tabella creata può essere:

  • - Transaction-safe (TST)
  • - Non Transaction-safe (NTST)

  • Le tabelle di tipo «Transaction-safe» permettono di recuperare i dati persi o di eseguire un rollback per annullare gli ultimi cambiamenti effettuati, mentre le tabelle «Non Transaction-safe» sono molto più veloci, e usano molta meno memoria per processare gli aggiornamenti, ma i cambiamenti sono definitivi, sarà impossibile annullare le modifiche se qualcosa è andato storto.


14. Storage Engine

  • In «MySQL» sono presenti diversi «Storage Engine», osserviamone alcuni:

Storage Engine

Tipologia

Note

MyISAM

NTST

Si tratta dello Storage Engine predefinito di «MySQL».

MERGE

NTST

-

MEMORY

NTST

Le tabelle vengono tenute in memoria e vanno perse se l’alimentazione del server viene a mancare.

InnoDB

TST

Destinato all’utenza professionale.



15. Installare e avviare MySQL

16. Comandi MySQL

  • I comandi «MySQL» permettono di effettuare le più svariate operazioni sul database, proprio per questo motivo è molto importate che l’amministratore, prima di eseguire una qualsivoglia operazione, stia molto attento a ciò che sta facendo.
  • Di norma un’istruzione «MySQL» deve essere scritta a lettere maiuscole, questo tipo di sintassi è utile quando dobbiamo interfacciare «MySQL» ad un software creato in Java, C#, PHP, etc.


17. Creare un database

  • Dopo aver installato ad aperto il prompt dei comandi di «MySQL», possiamo iniziare a realizzare il nostro primo database, per farlo ci basterà eseguire il comando:

  • CREATE DATABASE IF NOT EXISTS Rubrica;

  • Dove:

  • - CREATE DATABASE: permette di generare un nuovo database.

  • - IF NOT EXISTS: è una direttiva opzionale che permette di controllare se esiste già un database con lo stesso nome, se esiste l’esecuzione del comando non andrà a buon fine.

  • - Rubrica: nome del database.

  • Questo è solo il primo passo per realizzare la nostra rubrica telefonica (che è stata più volte menzionata nelle diapositive precedenti).


18. Creare una tabella

  • Il secondo passo per realizzare il nostro progetto, è quello di creare una delle due tabelle all’interno del database.
  • Per cominciare è necessario indicare a «MySQL» dove inserire la tabella, quindi scriviamo:

  • USE Rubrica;

  • Dove:

  • - USE: permette di selezionare il database che intendiamo utilizzare d’ora in avanti.

  • - Rubrica: nome del database.


19. Creare una tabella

  • Il comando da eseguire per realizzare la tabella è il seguente:

  • CREATE TABLE IF NOT EXISTS Persona (ID INT(3) UNSIGNED NOT NULL AUTO_INCREMENT, Nome VARCHAR(10) NOT NULL, Cognome VARCHAR(20) NOT NULL, PRIMARY KEY(ID)) ENGINE=MyISAM;

  • Dove:

  • - CREATE TABLE: permette di creare una nuova tabella.

  • - IF NOT EXISTS: è una direttiva opzionale che permette di controllare se esiste già una tabella con lo stesso nome, se esiste l’esecuzione del comando non andrà a buon fine.

  • - Persona(colonna tipo_colonna,… : si tratta del nome della tabella con la relativa specifica del contenuto.

  • - …, PRIMARY KEY (ID)): Chiave primaria della tabella.

  • - ENGINE=MyISAM: Specifica dello Storage Engine da utilizzare per la tabella.


20. Creare una tabella

  • È possibile raffigurare la tabella appena creata nel modo seguente:

ID
Nome
Cognome

  • Mentre la seconda tabella, generata mediante il comando:

  • CREATE TABLE IF NOT EXISTS Telefono (ID_Numero INT(3) UNSIGNED NOT NULL AUTO_INCREMENT, ID_Abbonato INT(3) UNSIGNED NOT NULL, Numero VARCHAR(15) NOT NULL, PRIMARY KEY(ID_Numero), FOREIGN KEY(ID_Abbonato) REFERENCES Persona(ID)) ENGINE=MyISAM;

  • sarà rappresentata in questo modo:

ID_Numero
ID_Abbonato
Numero


21. Aggiungere una nuova colonna

  • Volutamente, nella tabella «Persona», è stato dimenticato il campo relativo al sesso dell’abbonato; per aggiungere un nuovo campo in tabella non è necessario rimuovere la tabella appena creata per poi ripristinarla con l’aggiunta della nuova colonna, poiché basterà eseguire il comando:

  • ALTER TABLE Persona ADD Sesso ENUM("M", "F");

  • per ottenere un nuovo campo senza intaccare i dati eventualmente già inseriti.


22. Modificare il tipo di una colonna

  • Ci accorgiamo che nella tabella «Persona», è stato specificato un campo di tipo «VARCHAR» troppo corto, si tratta del nome dell’abbonato, la dimensione «10», infatti, potrebbe risultare inopportuna per valori come «Massimiliano» o «Michelangelo»; pertanto è necessario incrementare la lunghezza del campo in questo modo:

  • ALTER TABLE Persona MODIFY Nome VARCHAR(20);

  • Ricordo che è importante dopo aver fatto una stima della dimensione massima di ogni campo, eccedere sempre in lunghezza, anche quando non sembra opportuno; la memoria nei moderni calcolatori non manca di certo!


23. Modificare il nome e il tipo di una colonna

  • Invece per cambiare il nome e il tipo di una colonna presente in una nostra tabella, sarà necessario eseguire il comando «ALTER TABLE» seguito dal nome della tabella, seguito ancora dalla clausola «CHANGE» e dalla nuove specifiche.
  • Se a solo titolo di esempio, desiderassimo cambiare nella tabella «Telefono» il campo «Numero» rinominandolo in «Numero_di_telefono», occorrerebbe eseguire:

  • ALTER TABLE Telefono CHANGE Numero Numero_di_telefono VARCHAR(15) NOT NULL;


24. Rimuovere una colonna

  • Per rimuovere una colonna dal database, si usa «ALTER TABLE» seguito dal nome della tabella, dal comando «DROP» e dal nome della colonna che intendiamo rimuovere.
  • Ci accorgiamo che la colonna «Sesso» che avevamo aggiunto in precedenze è inutile ai fini del progetto, quindi ci apprestiamo a rimuoverla eseguendo:

  • ALTER TABLE Persona DROP Sesso;


25. Modificare il nome di una tabella

  • Possiamo anche decidere di modificare il nome di una tabella presente nel database, questa volta il comando da eseguire sarà «RENAME TABLE», seguito dal vecchio nome della tabella, dalla parola chiave «TO» e dal nuovo nome.
  • Decidiamo pertanto di cambiare il nome alla tabella «Persona» che d’ora in poi si chiamerà «Abbonato», perciò scriviamo:

  • RENAME TABLE Persona TO Abbonato;


26. Inserire una riga nella tabella

  • Abbiamo visto come creare e manipolare le tabelle, scopriamo adesso come riempirle introducendo informazioni.
  • Il primo passo è quello di inserire una persona in rubrica, per farlo ci serviamo di «INSERT INTO», seguendo una sintassi del tipo:

  • INSERT INTO Abbonato (Nome, Cognome) VALUES (‘Massimiliano’, ‘Rossi’);

  • Il comando mostratoci, se eseguito, permetterà di inserire «Massimiliano Rossi» all’interno della tabella «Abbonato»; il campo «ID» non menzionato, verrà automaticamente valorizzato in modo incrementale (clausola «AUTO_INCREMENT»).
  • A questo punto, sarà necessario interrogare la tabella, al fine di conoscere il valore dell’ID che è stato assegnato alla persona appena inserita. Il valore dell’ID è molto importante per la fase di introduzione del numero di telefono.


27. Interrogare un database

  • Restituire il contenuto di una o più tabelle, ordinando i risultati mostrati secondo le proprie esigenze, è operazione fondamentale non solo per noi tecnici, ma anche per i nostri clienti.
  • E’ possibile accedere ai dati memorizzati nelle tabelle utilizzando il comando «SELECT»; ecco come visualizzare la tabella «Abbonato» nella sua interezza:

  • SELECT * FROM Abbonato;

  • Questa volta otterremo un output a video degno di nota:

  • [Immagine] SELECT

  • Constatiamo che la persona che avevamo inserito nella scorsa slide, è stata aggiunta con un «ID» che vale «2». Otteniamo questo «ID» poiché in precedenza erano stati fatti due inserimenti di prova.


28. Modifica delle informazioni contenute in una tabella

  • Per manipolare il contenuto di una tabella è necessario conoscere il nome della tabella da modificare, le colonne interessate alla modifica, e le righe coinvolte.
  • A causa di un cambio di utenza, procediamo alla modifica dell’abbonato appena inserito («Massimiliano Rossi»), a tale scopo utilizziamo il comando «UPDATE» in questo modo:

  • UPDATE Abbonato SET Nome=‘Michelangelo’, Cognome=‘Bianchi’ WHERE ID=2;

  • Dopo aver eseguito il comando: tutti i numeri di telefono che erano associati a «Massimiliano Rossi», saranno associati a «Michelangelo Bianchi», in sostanza è stato modificato il nome e cognome dell’ abbonato.

  • ATTENZIONE: La clausola «WHERE» permette di filtrare i contenuti presenti in tabella e deve essere usata con cautela! Pertanto se «… WHERE ID=2» permette di modificare solo una riga (quella con «ID» univoco pari a «2»), una scrittura del tipo «… WHERE Cognome=‘Rossi’», potrebbe alterare più righe, danneggiando l’integrità dei dati inseriti.


29. Interrogare un database

  • A questo punto è necessario riuscire a leggere i numeri memorizzati in rubrica, proprio come se fossimo davanti al nostro telefono cellulare o difronte ad una vera e propria rubrica cartacea.
  • Innanzitutto è opportuno inserire svariati numeri di telefono, associandoli all’unica utenza inserita: «Michelangelo Bianchi» («ID» uguale a «2»), i comandi da eseguire in successione saranno:

  • INSERT INTO Telefono (ID_Abbonato, Numero) VALUES (‘2’, ‘1112223334’);
    INSERT INTO Telefono (ID_Abbonato, Numero) VALUES (‘2’, ‘4333222111’);
    INSERT INTO Telefono (ID_Abbonato, Numero) VALUES (‘2’, ‘1111111111’);
    INSERT INTO Telefono (ID_Abbonato, Numero) VALUES (‘2’, ‘2222222222’);

  • Il risultato di una semplice interrogazione del tipo «SELECT * FROM Abbonato» sarà:

  • [Immagine] SELECT su INSERT INTO

  • L’esito dell’interrogazione non soddisfa, poiché anche se riusciamo a leggere l’output, avremmo voluto ottenere dei risultati più chiari, come ad esempio: leggere il nome e cognome dell’utente anziché il suo «User ID».


30. Interrogare un database

  • Per leggere correttamente dei dati prelevando informazioni da due o più tabelle si utilizza il cosiddetto «JOIN», MySQL riesce a sfruttare questa funzionalità attraverso due sintassi diverse ma dall’equivalente effetto.
  • Sfruttiamo le potenzialità dello «JOIN» per interrogare la tabella «Abbonato» e la tabella «Telefono», l’obiettivo è sempre quello di mostrare dei risultati comprensibili, scriviamo:

  • SELECT Nome, Cognome, Numero FROM Abbonato, Telefono WHERE Abbonato.ID=Telefono.ID_Abbonato;

  • In questo modo stiamo dicendo a MYSQL di mostrarci le colonne «Nome», «Cognome» e «Numero» presenti nelle tabelle «Abbonato» e «Telefono», mentre le righe mostrate sono solo quelle che trovano una corrispondenza tra l’ID della tabella «Abbonato» e l’ID relativo all’abbonato della tabella «Telefono».
    Vediamo quindi il risultato (che questa volta ci soddisfa):

  • [Immagine] SELECT su JOIN

  • Se ci fosse stato un altro abbonato, e quest’ultimo non avesse alcun numero di telefono associato, non essendoci alcuna corrispondenza tra numero di telefono e abbonato inserito, possiamo affermare che l’abbonato in questione non sarebbe stato visualizzato.


31. Altre clausole della condizione «WHERE»

  • Insieme all’ istruzione «WHERE» è possibile utilizzare le seguenti condizioni:

  • - Colonna = Valore
    - Colonna > Valore
    - Colonna < Valore
    - Colonna >= Valore
    - Colonna <= Valore
    - Colonna != Valore
    - Colonna <> Valore
    - Colonna BETWEEN Valore AND Valore1
    - Colonna NOT BETWEEN Valore AND Valore1
    - Colonna LIKE Valore
    - Colonna NOT LIKE Valore
    - Colonna IS NULL
    - Colonna IS NOT NULL
    - Colonna IN (Valore, Valore1, Valore2,…)
    - Colonna NOT IN (Valore, Valore1, Valore2,…)


32. Interrogare un database

  • Se avessimo voluto utilizzare una sintassi poco più complessa per interrogare il database, avremmo potuto scrivere:

  • SELECT Nome, Cognome, Numero FROM Abbonato JOIN Telefono ON Abbonato.ID=Telefono.ID_Abbonato;

  • ottenendo lo stesso identico risultato, e cioè:

  • [Immagine] SELECT su JOIN


33. Rimuovere un dato da un database

  • Interrogare correttamente un database permette di rimuovere i dati in esso presenti in modo più produttivo; a tal proposito interroghiamo la tabella «Telefono» al fine di rimuovere un numero di telefono, quindi scriviamo «SELECT ID_Numero, Nome, Cognome, Numero FROM Abbonato JOIN Telefono ON Abbonato.ID=Telefono.ID_Abbonato»:

  • [Immagine] DELETE su JOIN

  • Eliminare un dato adesso è facile, scriviamo ad esempio:

  • DELETE FROM Telefono WHERE ID_Numero=3;

  • Notiamo che il numero di telefono «1111111111» associato all’utente «Michelangelo Bianchi» sarà rimosso.


34. Eliminare una tabella

  • Per eliminare le informazioni contenute in una tabella, si utilizzerà il comando «TRUNCATE TABLE», seguito dal nome della tabella.
  • Se avessimo deciso di rimuovere tutti i numeri di telefono dalla tabella «Telefono», avremmo dovuto eseguire il comando:

  • TRUNCATE TABLE Telefono;

  • Se avessimo deciso di rimuovere fisicamente la tabella dal database, avremmo dovuto scrivere:

  • DROP TABLE IF EXISTS Telefono;

  • Il suffisso «IF EXISTS» è opzionale, e permette di non restituire alcun messaggio di errore, anche nel caso in cui la tabella specificata non esista.


35. Eliminare un database

  • Se avessimo deciso di eliminare il nostro database, sarebbe stato necessario scrivere:

  • DROP DATABASE IF EXISTS Rubrica;

  • Sappiamo che il suffisso «IF EXISTS» è opzionale, e permette di non restituire alcun messaggio di errore, anche nel caso in cui il database specificato non esista.


36. Connettersi a MySQL con Java

  • Per connettersi ad un database tramite un programma scritto in «Java», è necessario un driver (JDBC o ODBC), che consente il corretto dialogo tra «MySQL» e il nostro software.
  • Nella successiva slide, sarà presentato un primissimo esempio di connessione ad un database «MySQL», adoperando la tecnologia «Java» con driver JDBC.

  • Abbiamo preferito utilizzare JDBC poiché non implica la modifica di numerose parti di codice sorgente, sia nel caso avessimo intenzione di utilizzare in futuro un altro tipo di database («Oracle», «DB2», «SQL Server») e sia nel caso dovessimo far girare il nostro software su un’altra architettura.

  • Se hai eseguito l’installazione Full di «MySQL», puoi rintracciare il driver JDBC nella cartella d'installazione del prodotto, altrimenti, il file del driver può sempre essere scaricato dall’URL: http://www.mysql.com/downloads/connector/j/.


37. Connettersi a MySQL con Java


[Download]

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Programma {
public static void main(String[] args) {
String mysql_driver = "com.mysql.jdbc.Driver"; // Percorso del driver
String database_url = "jdbc:mysql://localhost:3306/database"; // URL del database
String username = “root"; // Username di accesso – root è la username predefinita
String password = “tua_password"; // Password di accesso
// Caricamento dei driver in memoria
try {
Class.forName ("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException exc) {
exc.printStackTrace();
}
// Test della connessione
try {
Connection connessione = DriverManager.getConnection (database_url, username, password);
System.out.println("Connesso al database "+connessione.getCatalog()+".");
connessione.close();
}
catch (SQLException exc) {
exc.printStackTrace();
}
}
}


38. Eseguire il programma di connessione

  • Per connettersi al database è necessario definire l’interfaccia «Connection» e le classi «DriverManager» e «SQL Exception»; queste strutture, per poter operare, hanno bisogno del driver JDBC presente nel relativo file di pacchetto «mysql-connector-java-X.X.XX-bin.jar» *.
  • È possibile importare uno o più file java attraverso la definizione di un «classpath» (comando «-cp»), che permette all’interprete di rintracciare tutte le componenti necessarie affinché l’applicazione possa funzionare correttamente.
  • Nel nostro caso specifico, per eseguire il codice del precedente esempio senza ottenere errori in output, sarà necessario dare un comando del tipo:

  • java -cp "C:\mysql-connector-java-X.X.XX-bin.jar"; Programma *

  • Posto che il file di pacchetto si trovi in «C:\».

  • * Le «X» segnate in rosso rappresentano un numero variabile, relativo alla versione del driver JDBC.


39. Interrogare MySQL con Java

  • Per interrogare un database «MySQL» in «Java», è necessario importare altre due librerie (comunque presenti nella libreria java.sql):

  • - «java.sql.Statement» che ci permette di eseguire una interrogazione verso il database.
  • - «java.sql.ResultSet» che ci permette di salvare i risultati dell’interrogazione eseguita.

  • Prendendo in esame l’esempio della rubrica telefonica, nella prossima slide eseguiremo una query di esempio sulla tabella «Abbonato»…


40. Interrogare MySQL con Java


[Download]

(Prima parte del codice)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Programma {
public static void main(String[] args) {
String mysql_driver = "com.mysql.jdbc.Driver"; // Percorso del driver
String database_url = "jdbc:mysql://localhost:3306/rubrica"; // URL del database
String username = "root"; // Username di accesso – root è la username predefinita
String password = "tua_password"; // Password di accesso
// Caricamento dei driver in memoria
try {
Class.forName ("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException exc) {
exc.printStackTrace();
}

41. Interrogare MySQL con Java


[Download]

(Seconda parte del codice)

try {
// Connessione al database
Connection connessione = DriverManager.getConnection (database_url, username, password);
// Creazione oggetto di tipo "Statement" per eseguire la query
Statement cmd = connessione.createStatement();
// Salvataggio della query da eseguire in una stringa
String query = "SELECT * FROM Abbonato";
// Esecuzione della query e salvataggio dei risultati in oggetto "ResultSet"
ResultSet risultato = cmd.executeQuery(query);
// Stampa del titolo delle colonne
System.out.println("ID - Nome - Cognome");
// Stampa dei risultati riga per riga
while(risultato.next()) {
System.out.print ((risultato.getString("ID")) + " - ");
System.out.print ((risultato.getString("Nome")) + " - ");
System.out.println (risultato.getString("Cognome"));
}
// Chiusura delle connessioni aperte
risultato.close();
cmd.close();
connessione.close();
}
catch (SQLException exc) {
exc.printStackTrace();
}
}
}