Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Java: interazione con il DBMS MySQL

Impariamo ad effettuare una connessione all'ultima versione del database MySQL e ad eseguire operazioni SQL di base per la creazione di tabelle, inserimento e recupero di record.
Impariamo ad effettuare una connessione all'ultima versione del database MySQL e ad eseguire operazioni SQL di base per la creazione di tabelle, inserimento e recupero di record.
Link copiato negli appunti

In questo articolo vedremo come effettuare una connessione all'ultima versione del database MySql ed eseguire operazioni SQL di base per la creazione di tabelle, inserimento e recupero di record.

Prima di addentrarci nella realizzazione del codice, facciamo in modo di avere un'installazione funzionante di MySql. Possiamo scaricare la versione per Windows di MySql 8.0 al seguente link. Per gli scopi del presente articolo, durante il processo di installazione, possiamo tranquillamente scegliere di installare solo il Server di database.

Una volta completata l'installazione, mandiamo in esecuzione il tool a riga di comando, MySQL 8.0 Command Line Client - Unicode, situato nel percorso C:\Program Files\MySQL\MySQL Server 8.0\bin\. Grazie a questa utility siamo in grado di eseguire le operazioni preliminari di creazione di un nuovo database con un nuovo utente da utilizzare per la connessione. Dopo l'apertura della console MySQL, digitiamo in successione i seguenti comandi:

CREATE DATABASE test;
USE test;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL ON *.* TO 'admin'@'localhost';
SET GLOBAL time_zone = '-6:00';

Tramite queste istruzioni abbiamo un database di nome test che selezioniamo per agire su di esso (USE), un utente con username admin e password admin con tutti i privilegi (da adottare esclusivamente in fase di sviluppo, mai in produzione), ed infine il timezone settato opportunamente per evitare problemi di connessione.

Per poterci collegare a MySQL da un applicativo Java, abbiamo bisogno di recuperare il driver JDBC da inserire successivamente nel classpath di un progetto Java realizzato con il nostro IDE preferito. Il connettore JDBC per MySQL 8.0 è scaricabile al seguente link.

Dopo i passaggi precedenti dovremmo avere un Server di database in esecuzione ed il nostro IDE configurato con il driver JDBC di MySQL. Possiamo quindi iniziare la scrittura del codice Java adottando lo stile di programmazione (introdotto con Java 8) per quanto riguarda l'utilizzo degli oggetti Connection, Statement, PreparedStatement e ResultSet.

Nel definire la classe demo della nostra applicazione, iniziamo con l'inserimento di un insieme di variabili statiche che renderanno più leggibile il codice JDBC:

package it.html.mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MySql {
    private final static String URL = "jdbc:mysql://localhost:3306/test?";
    private final static String USER = "admin";
    private final static String PASSWORD = "admin";
    private final static String DRIVER = "com.mysql.cj.jdbc.Driver";
    private final static String DROP_TABLE = "DROP TABLE IF EXISTS animals";
    private final static String CREATE_TABLE = "CREATE TABLE animals (\n" +
	"     id MEDIUMINT NOT NULL AUTO_INCREMENT,\n" +
	"     name CHAR(30) NOT NULL,\n" +
	"     PRIMARY KEY (id)\n" +
	");";
    private final static String INSERT = "INSERT INTO animals " + "(name) values (?)";
    private final static String SELECT = "SELECT * from animals";
    public static void main(String[] args) {
    //Qui il codice JDBC
    }
}

Dall'alto verso il basso le prime quattro variabili indicano i parametri di connessione verso il database, mentre le restanti una serie di statements SQL che eseguiremo in successione. Il primo blocco di codice che andiamo ad inserire nel metodo main() riguarda la parte principale del blocco try-with-resources:

try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
       Statement stmt = conn.createStatement();
       PreparedStatement pstmt = conn.prepareStatement(INSERT);) {
                .....
  } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(MySql.class.getName()).log(Level.SEVERE, null, ex);
}

Grazie a Java riceviamo la funzionalità di chiusura automatica delle risorse create. Attraverso la classe DriverManager otteniamo una connessione verso MySQL che utilizziamo nelle successive istruzioni della parte try() per ottenere gli oggetti statements necessari all'esecuzione di istruzioni SQL verso il database.

All'interno del blocco try abbiamo quindi una connessione attiva ed oggetti pronti per l'interazione con il database. Continuiamo la realizzazione del codice caricando il driver JDBC ed utilizzando l'oggetto Statement stmt per l'esecuzione dell'operazione SQL di creazione della tabella animals, istruzione contenuta nella variabile CREATE_TABLE.

Per evitare che l'esecuzione ripetuta del programma possa causare errori, facciamo in modo di eseguire l'istruzione SQL di DROP della tabella animals prima della sua creazione:

Class.forName(DRIVER);
  stmt.executeUpdate(DROP_TABLE);
  stmt.executeUpdate(CREATE_TABLE);

Con una tabella a disposizione, siamo pronti per inserire qualche record utilizzando l'oggetto pstmt di tipo PreparedStatement:

....
  pstmt.setString(1, "dog");
  pstmt.execute();
  pstmt.setString(1, "cat");
  pstmt.execute();
....

Come ultima operazione mandiamo in esecuzione la query SQL contenuta nella variabile SELECT dichiarata in precedenza:

....
  try (ResultSet rs = stmt.executeQuery(SELECT);) {
      while (rs.next()) {
         System.out.println("--------------------------------------");
         System.out.println("id= " + rs.getString("id"));
         System.out.println("nome= " + rs.getString("name"));
         System.out.println("--------------------------------------");
      }
  }
....

Anche in questo caso le try-with-resources ci aiutano nella realizzazione di codice compatto con autochiusura dell'oggetto ResultSet ottenuto dall'esecuzione della query, ed iterato successivamente per la stampa dei dati.

Ti consigliamo anche