JavaFX + JDBC

In questo tutorial mostreremo un’applicazione JavaFX capace di interagire con il database mediante JDBC(Java DataBase Connectivity). Data l’enorme interattività di JavaFX, usando JDBC si riesce ad implementare un sistema di query ‘ON-DEMAND’ reattivo e di semplice implementazione. Dopo aver visto nel precedente tutorial su JavaFX la realizzazione di GUI mediante Java Scene Builder linkabili nel progetto JavaFX vedremo come far interagire suddette GUI con grafica FXML con il database mediante JDBC.
Per prima cosa occorre configurare l’ambiente in maniera tale che JavaFX sia in grado di comunicare con il database. Come database utilizzeremo MySql e ci interfacceremo con esso medinate l’RDBS PhpMyAdmin.
Per configurare MySql, vi sono innumerevoli possibilità XAMPP, MySQL Community, ecc..personalmente utilizzo WAMP su piattaforma Windows che trovo di una semplicità disarmante sia nella configurazione che nell’utilizzo.
Una volta configurato WAMP (Windows Apache MySql PHP/Perl) ed avviato in localhost PhpMyAdmin vi fornisco un file sql da importare così che avrete il vostro database già pronto all’utilizzo: iscritticorsi.sql.

Diagramma ER Applicazione JavaFX + JDBC

Diagramma ER del database iscritticorsi.sql

Scaricato suddetto file SQL occorre importarlo all’interno del database MySql, per fare ciò dalla schermata principale di phpMyAdmin cliccare su Importa->Scegli file->iscritticorsi.sql->Esegui.
Come potete anche notare dall’immagine di seguito riportata.
Importazione DataBase PhpMyAdmin

Importazione guidata del DataBase iscritticorsi.sql in PhpMyAdmin

A questo punto per poter utilizzare JDBC all’interno di un progetto JavaFX abbiamo bisogno di svolgere due piccoli tasks.
1. Installiamo il Connector J che rende possibile la comunicazione JavaFX + JDBC, lo potete trovare a questo link sia per Windows che per gli altri sistemi operativi, dove occorrerà selezionare Indipendent Platform.
2. Una volta scaricato ed installato nel nostro nuovo progetto JavaFX occorrerà importare il JAR, che potete scaricare quì stesso: mysql-connector-java-5.1.29-bin.jar.
Ma andiamo per gradi, realizzate un nuovo progetto JavaFX come spiegato nel precedente tutorial dove come file FXML avrete questo file FXML: Cerca.fxml.
In poche parole, come avrete capito questo tutorial è collegato ai precedenti due tutorial su JavaFX:

Ok! a questo punto compiuti i normali passi di realizzazione di un nuovo progetto JavaFX al link immediatamente sopra occorre inserire JDBC, nulla di più semplice.
Deriviamo in nostro database in una struttura delle classi, ossia realizziamo il Model della nostra applicazione,

GUI JavaFX Applicazione Database JDBC

GUI JavaFX dell’ Applicazione che interagisce con il database iscritticorsi mediante JDBC

per essere più rapidi potete scaricare le classi che fanno parte del model: Studente.java e Corso.java.
Tale progetto si basa sul pattern DAO che non approfondisco nel tutorial in quanto l’applicazione viene compresa anche senza entrare troppo nel merito di questo pattern. Ora quest’applicazione basata su questa semplice interfaccia JavaFX si occuperà di fornire i corsi seguiti da uno studente data la sua matricola.

PASSO 1: Connessione JDBC al database MySql

PASSO 1.1 Realizziamo in prima batutta la classe che implementa la logica DAO per la comunicazione con il database ed eccone quà il codice, tale classe la chiameremo DBConnect.java.

package it.univaq.mwt.univaq.esercizio1.business;

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

public class DBConnect {
	private final static String jdbcURL = 
                "jdbc:mysql://localhost/iscritticorsi?user=root&password=" ;
	public static Connection getConnection() {
		try {
			Class.forName("com.mysql.jdbc.Driver") ;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("Driver JDBC non trovato", e) ; 
		}
		Connection c;
		try {
			c = DriverManager.getConnection(jdbcURL);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("Impossibile connettersi al database", e) ; 
		}
		return c ;
	}
}

Tale classe come è facile intuire restituisce una connessione al database, ci sarà di aiuto per l’esecuzione della query.
PASSO 1.2 DBConnect.java necessita del JAR precedentemente scaricato ossia mysql-connector-java-5.1.29-bin.jar. Quindi create dalla root del vostro progetto JavaFX una cartella lib al cui interno inserirete questa libreria dopo aver installato il Connector J.
PASSO 1.3 Configurazione del JAR nel Java Build Path Per configurare il JAR mysql-connector-java-5.1.29-bin.jar nel Java Build Path seguite questi passi.
Tasto destro sul progetto->Build Path->Configure Build Path poi spostatevi nella sezione Libraries quindi Add Jars… sulla destra, sfogliate tale progetto fino a raggiungere tale Jar nella cartella lib, quindi cliccate Ok e poi di nuovo Ok per uscire dalla configurazione del Build Path.

PASSO 2: Esecuzione della Query ‘ON-DEMAND’ su richiesta del Controller

Nel Controller se avete svolto correttamente i precedenti passi avrete il metodo doBtnCerca, ora vogliamo che tale metodo invochi l’esecuzione di una query sul database, il codice di tale metodo è il seguente.

@FXML
	void doBtnCerca(ActionEvent event) {
		areaRisultato.setText("");
		IscrittiDAO dao = new IscrittiDAO();
		List corsiSeguiti = dao.corsiSeguiti(textMatricola.getText());
		for (Corso c : corsiSeguiti)
			areaRisultato.appendText(c.getNome() + " ["
					+ c.getCodIns() + "], " + c.getCrediti()
					+ " crediti, semestre " + c.getPd() + "\n");
	}

Tale metodo richiede mediante l’oggetto IscrittiDAO, che ora andremo a realizzare, l’esecuzione di una query. Tale metodo restituirà una lista di Corsi, e poi setterà la TextArea areaRisultato della GUI appendendovi nome del corso, codice dell’insegnamento, numero dei crediti e semestre di erogazione.
Ecco invece la classe IscrittiDAO al cui interno vi è il metodo corsiSeguiti che presa una matricola di uno studente, precedentemente passata mediante la TextField dalla GUI, restituisce i corsi seguiti.

package it.univaq.mwt.univaq.esercizio1.business.impl;

import it.univaq.mwt.univaq.esercizio1.business.DBConnect;
import it.univaq.mwt.univaq.esercizio1.business.model.Corso;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class IscrittiDAO {

	public ArrayList corsiSeguiti(String matricola) {
		ArrayList corsiSeguiti = new ArrayList();
		Connection connection = DBConnect.getConnection();
		PreparedStatement preparedStatement = null;
		ResultSet rs = null;
		try {
			preparedStatement = connection.prepareStatement("SELECT c.* "
					+ "FROM iscrizione i "
					+ "INNER JOIN corso c ON i.codins = c.codins "
					+ "WHERE i.matricola = ?");
			preparedStatement.setString(1, matricola);
			rs = preparedStatement.executeQuery();
			while (rs.next())
				corsiSeguiti.add(new Corso(rs.getString("codins"), rs
						.getInt("crediti"), rs.getString("nome"), rs
						.getInt("pd")));
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		} finally {
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
				}
			}
		}
		return corsiSeguiti;
	}
}

Ok! Ecco fatto non resta altro che effettuare il Run As del Main come Java Application ed è fatta, attenzione ad i package ne ho creati di vari per la suddivisione delle logiche ed anche alla password degli utenti del database nel mio caso era utente root senza password per il database MySql configurato sulla porta di default 3306 nel php.ini.
Per i più svogliati o anche per un semplice controllo è possibile scaricare tale progetto quì.
Buon divertimento con JavaFX! 🙂

JavaFX + JDBC ultima modidfica: 2015-01-29T22:17:52+01:00 da Gianluca Di Vincenzo
Posted in: Java

By on 29 Gennaio 2015

Tagged: , , , , , , ,