Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 66 di 134
  • livello avanzato
Indice lezioni

Un'architettura per l'esecuzione di Query

Progettiamo una semplice architettura di accesso ad un database che consenta l'esecuzione delle query.
Progettiamo una semplice architettura di accesso ad un database che consenta l'esecuzione delle query.
Link copiato negli appunti

Eseguire query SQL con JDBC significa essenzialmente utilizzare
le classi Statement, PreparedStatement e ResultSet delle API
all'interno di codice Java.

Piuttosto che addentrarci in esempi sparsi
di utilizzo di queste classi cerchiamo di progettare una semplice
architettura di accesso al database che ne incorporerà l'utilizzo. Il
nostro obiettivo è realizzare una classe che incapsuli tutta la
gestione di apertura delle connessioni ed il recupero di query da file
applicativi. I benefici di questa progettazione saranno
chiari quando introdurremo il pattern DAO
(Data Access Object).

Il nostro scopo iniziale è inserire in un file
di properties tutti i parametri di connessione verso il database
Postgres, in questo modo avremo la libertà di impostarli in modo molto
semplice e leggibile senza toccare il codice Java.

La classe di
gestione dovrà quindi accedere al file e recuperare i
valori necessari. Sebbene sia possibile costruire query SQL
all'interno di codice Java attraverso concatenazione di stringhe, è
una pratica che ci sentiamo di non incoraggiare per almeno quattro
motivi:

  1. Leggibilità
    altri programmatori.
  2. Bug fixing
    sintattici.
  3. Manutenibilità
    per l'escuzione in un client di database o per la collaborazione con un DBA.
  4. Visibilità di insieme
    codice, dove sono collocate? Quali sono le classi che le usano?

Per queste ragioni preferiamo indicare una soluzione che porta
ad inserire le query SQL in un file specifico che
può essere di qualunque tipo: XML, properties o TXT. Per la
soluzione mostrata nel presente capitolo, e nel successivo,
utilizzeremo un file di properties.

Indichiamo con il nome di DBManager
affidiamo il caricamento dei file di properties db.properties
query.properties
it.html.jdbc.dao
connessione al database e tutte le stringhe di interrogazione SQL ed
operazioni CRUD.

La classe DBManager

public class DBManager {
	private static DBManager dbManager;
	private Properties queryProperties;
	private Properties dbProperties;
	private String postgresUrl;
	private String user;
	private String password;
	private DBManager() throws DBManagerException {
		try (InputStream dbPropFile = getClass().getResourceAsStream("db.properties");
			 InputStream queryPropFile = getClass().getResourceAsStream("query.properties");) {
			queryProperties = new Properties();
			dbProperties = new Properties();
			dbProperties.load(dbPropFile);
			queryProperties.load(queryPropFile);
			postgresUrl = "jdbc:postgresql://" + dbProperties.getProperty("host") + ":"
					+ dbProperties.getProperty("port") + "/" + dbProperties.getProperty("dbName");
			user = dbProperties.getProperty("user");
			password = dbProperties.getProperty("password");
		} catch (IOException e) {
			throw new DBManagerException(e);
		}
	}
	public static DBManager getInstance() throws DBManagerException {
		if (dbManager == null)
			dbManager = new DBManager();
		return dbManager;
	}
    public Connection getConnection() throws SQLException{
		return DriverManager.getConnection(postgresUrl, user, password);
    }
	public String getQuery(String queryId) {
		return queryProperties.getProperty(queryId);
	}
}

Il costruttore della classe legge i file di properties salvando
i riferimenti nelle variabili di istanza queryProperties
dbProperties db.properties
stringa di connessione al database e salvati user password
all'interno delle relative variabili di istanza.

Il metodo
getIstance()
metodo getConnection()
getQuery()

Ti consigliamo anche