Libreria Per l'Accesso a Db

9
Creare una libreria per la connessione a un database MySQL Interfaccia DbConnector L’interfaccia DbConnector consente di aprire e chiudere una connessione con un database server. Le sue responsabilità sono: - caricare il driver (loadDriver), - creare e mantenere una connessione con il database server ( openConn), - chiudere la connessione al database server ( closeConn), - selezionare un database (selectDb). DbConnector.java package cinziabb.dblib; import java.sql.Connection; import java.sql.SQLException; /** * @author Bocchi Cinzia * @version 1.01.001 10/07/2011 * */ /** * L'interfaccia DbConnect gestisce la connessione a un database server remoto.<br> * Le principali funzionalità offerte sono: * <ul> * <li>caricare il driver JDBC,</li> * <li>creare e mantenere una connessione con il database server,</li> * <li>chiudere la connessione al database server.</li> * </ul> */ Bocchi Cinzia Ultimo aggiornamento: 20/07/2012 1

description

Una libreria per semplificare l'accesso a database MySQL

Transcript of Libreria Per l'Accesso a Db

Page 1: Libreria Per l'Accesso a Db

Creare una libreria per la connessione a un database MySQL

Interfaccia DbConnector

L’interfaccia DbConnector consente di aprire e chiudere una connessione con un database server.

Le sue responsabilità sono:

- caricare il driver (loadDriver),- creare e mantenere una connessione con il database server (openConn),- chiudere la connessione al database server (closeConn),- selezionare un database (selectDb).

DbConnector.java

package cinziabb.dblib;import java.sql.Connection;import java.sql.SQLException;/** * @author Bocchi Cinzia * @version 1.01.001 10/07/2011 * */

/** * L'interfaccia DbConnect gestisce la connessione a un database server remoto.<br> * Le principali funzionalità offerte sono: * <ul> * <li>caricare il driver JDBC,</li> * <li>creare e mantenere una connessione con il database server,</li> * <li>chiudere la connessione al database server.</li> * </ul> */

Bocchi CinziaUltimo aggiornamento: 20/07/2012

1

Page 2: Libreria Per l'Accesso a Db

public interface DbConnector {/** * Carica il driver JDBC. * @throws ClassNotFoundException se non è possibile trovare il driver */void loadDriver() throws ClassNotFoundException;/** * Apre una connessione con il database server. * @return un oggetto che rappresenta la connessione * @throws SQLException se non è possibile stabilire una connessione con

il server */Connection openConn() throws SQLException;/** * Chiude la connessione specificata. * @param conn l'oggetto che rappresenta la connessione * @throws SQLException se non è possibile stabilire una connessione con

il server */void closeConn() throws SQLException;/** * Seleziona il database specificato. * @param database una stringa che contiene il nome del database * @throws SQLException se non è possibile accedere al database o se la

connessione con il server è chiusa */void selectDb(String database) throws SQLException;

}

Classe MySqlConnector

La classe MySqlConnector implementa l’interfaccia DbConnector e si occupa in modo specifico delle connessioni a MySQL.

La struttura interna comprende:- la stringa che contiene il nome completo del driver,- l’oggetto che rappresenta la connessione creata,- la stringa che contiene l’indirizzo dell’host,- le stringhe contenenti lo username e la password per accedere al database server.

Bocchi CinziaUltimo aggiornamento: 20/07/2012

2

Page 3: Libreria Per l'Accesso a Db

Bocchi CinziaUltimo aggiornamento: 20/07/2012

3

Page 4: Libreria Per l'Accesso a Db

MySqlConnector.java

package cinziabb.dblib;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/** * @author Bocchi Cinzia * @version 1.01.001 10/07/2011 * */

public class MySqlConnector implements DbConnector {//costanti di classepublic static final String DRIVER = "com.mysql.jdbc.Driver";private static final String PROTOCOL = "jdbc:mysql://";//variabili di istanzaprivate Connection conn;private String host;private String username;private String password;private String database;//costruttori

/** * Crea un oggetto MySqlConnector per accedere al server specificato.

L'accesso non necessita di username e password. * @param host una stringa che contiene l'indirizzo del server */public MySqlConnector(String host){

this.host = PROTOCOL + host.trim();this.username = "";this.password = "";

}

/** * Crea un oggetto MySqlConnector per accedere al server specificato, con

lo username e la password indicate. * @param host una stringa che contiene l'indirizzo del server * @param username una stringa che contiene lo username richiesto * @param password una stringa che contiene la password richiesta */public MySqlConnector(String host, String username, String password){

this.host = PROTOCOL + host.trim();this.username = username;this.password = password;

}

//metodi

/** * Carica il driver JDBC. * @throws ClassNotFoundException se non è possibile trovare il driver */public void loadDriver() throws ClassNotFoundException{

Bocchi CinziaUltimo aggiornamento: 20/07/2012

4

Page 5: Libreria Per l'Accesso a Db

Class.forName(DRIVER);}

/** * Apre una connessione con il database server. * @return un oggetto che rappresenta la connessione * @throws SQLException se non è possibile stabilire una connessione con

il server */public Connection openConn() throws SQLException{

conn = DriverManager.getConnection(host, username, password);return conn;

}/** * Chiude la connessione specificata. * @param conn l'oggetto che rappresenta la connessione * @throws SQLException se non è possibile stabilire una connessione con

il server */public void closeConn() throws SQLException{

conn.close();}

/** * Seleziona il database specificato. * @param database una stringa che contiene il nome del database * @throws SQLException se non è possibile accedere al database o se la

connessione con il server è chiusa */public void selectDb(String database) throws SQLException {

conn .setCatalog(database);}

}

Segue il codice per il test della classe.

TestMySqlConnector.java

package test;import java.sql.Connection;import java.sql.SQLException;import cinziabb.dblib.MySqlConnector;public class TestMySqlConnector {

public static void main(String[] args){String host = javax.swing.JOptionPane.showInputDialog("Inserisci

l'indirizzo dell'host: ");String username =

javax.swing.JOptionPane.showInputDialog("Inserisci lo username o lascia in bianco il campo: ");

String password = javax.swing.JOptionPane.showInputDialog("Inserisci la password o lascia in bianco il campo: ");

MySqlConnector mysql = new MySqlConnector(host, username, password);

try{

Bocchi CinziaUltimo aggiornamento: 20/07/2012

5

Page 6: Libreria Per l'Accesso a Db

mysql.loadDriver();System.out.println("Chiamato loadDriver");Connection conn = mysql.openConn();System.out.println("Chiamato openConn");String database =

javax.swing.JOptionPane.showInputDialog("Inserisci il nome del database: ");mysql.selectDb(database);System.out.println("Chiamato selectDB");mysql.closeConn();System.out.println("Chiamato closeConn");

}catch(ClassNotFoundException e){

javax.swing.JOptionPane.showMessageDialog(null, "Impossibile trovare il driver");

e.printStackTrace();}catch(SQLException e){

javax.swing.JOptionPane.showMessageDialog(null, "Impossibile stabilire una connessione con il server o con il database");

e.printStackTrace();}

}}

Utilizzando la classe MySqlConnector, gli statement per accedere a un database diventano:

1) Creazione di un’istanza di MySqlConnector

MySqlConnector mysql = new MySqlConnector(host, username, password);

oppure

MySqlConnector mysql = new MySqlConnector(host);

2) Caricamento del driver

mysql.loadDriver();

Bocchi CinziaUltimo aggiornamento: 20/07/2012

6

Page 7: Libreria Per l'Accesso a Db

3) Connessione a MySQL

Connection conn = mysql.openConn();

4) Selezione del database

mysql.selectDb(database);

5) Chiusura della connessione, dopo aver operato sul db

mysql.closeConn();

Come si può osservare, la scrittura risulta semplificata poiché molti parametri sono “nascosti” nella classe. La libreria, inoltre, può essere esportata come file jar ed essere utilizzata in altri progetti, con la stessa procedura seguita per il file jar del driver JDBC.

Un ulteriore test con l’esecuzione di statement SQL.

TestMySqlConnector.java

package test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JOptionPane;import cinziabb.dblib.MySqlConnector;public class TestMySqlConnector2 {

public static void main(String[] args){String host = javax.swing.JOptionPane.showInputDialog("Inserisci

l'indirizzo dell'host: ");String username =

javax.swing.JOptionPane.showInputDialog("Inserisci lo username o lascia in bianco il campo: ");

String password = javax.swing.JOptionPane.showInputDialog("Inserisci la password o lascia in bianco il campo: ");

MySqlConnector mysql = new MySqlConnector(host, username,

Bocchi CinziaUltimo aggiornamento: 20/07/2012

7

Page 8: Libreria Per l'Accesso a Db

password);try{

mysql.loadDriver();Connection conn = mysql.openConn();String database =

javax.swing.JOptionPane.showInputDialog("Inserisci il nome del database: ");mysql.selectDb(database);

/*-----PREPARAZIONE E ESECUZIONE DI QUERY SENZA PARAMETRI E ANALISI DEL RESULTSET-----*/

Statement st = conn.createStatement();

/*QUERY NON PARAMETRICA CHE RESTITUISCE LA TABELLA AUTORI*/String sqlQuery = "SELECT * FROM autori;";

ResultSet rs = st.executeQuery(sqlQuery);//estrazione dei datiJOptionPane.showMessageDialog(null, "Guarda che cosa ha

restituito la query " + sqlQuery);while (rs.next())

JOptionPane.showMessageDialog(null, "autID = "+rs.getInt("autID")+" nome = "+rs.getString("nome")+" cognome = "+rs.getString("cogn"));

/*QUERY NON PARAMETRICA CHE AGGIUNGE UNA RIGA ALLA TABELLA AUTORI*/

sqlQuery = "INSERT INTO autori (nome, cogn) VALUES ('Paolo', 'Rossi');";

int row = st.executeUpdate(sqlQuery);//Stampa di row per verificare che sia stata aggiunta una riga

(record) al databaseJOptionPane.showMessageDialog(null, "La query " + sqlQuery + "

ha inserito " + row + " record");

/*-----PREPARAZIONE E ESECUZIONE DI QUERY PARAMETRICHE E ANALISI DEL RESULTSET-----*/

/*QUERY PARAMETRICA CHE RESTITUISCE I DATI DEGLI AUTORI IL CUI COGNOME E' SPECIFICATO IN INPUT DALL'UTENTE*/

sqlQuery = "SELECT * FROM autori WHERE cogn = ?;";PreparedStatement ps= conn.prepareStatement(sqlQuery);String cognome = JOptionPane.showInputDialog("Cognome

dell'autore che stai cercando:");ps.setString(1,cognome);rs = ps.executeQuery();//estrazione dei datiSystem.out.println();JOptionPane.showMessageDialog(null, "Guarda che cosa ha

restituito la query " + sqlQuery);while (rs.next())

JOptionPane.showMessageDialog(null, "autID = "+rs.getInt("autID")+" nome = "+rs.getString("nome")+" cognome = "+rs.getString("cogn"));

/*QUERY PARAMETRICA CHE AGGIUNGE UNA RIGA ALLA TABELLA AUTORI*/

sqlQuery = "INSERT INTO autori (nome, cogn) VALUES (?,?);";ps= conn.prepareStatement(sqlQuery);String nome = JOptionPane.showInputDialog("Nome dell'autore da

inserire:");

Bocchi CinziaUltimo aggiornamento: 20/07/2012

8

Page 9: Libreria Per l'Accesso a Db

ps.setString(1,nome);cognome = JOptionPane.showInputDialog("Cognome dell'autore da

inserire:");ps.setString(2,cognome);row = ps.executeUpdate();//Stampa di row per verificare che sia stata aggiunta una riga

(record) al databaseJOptionPane.showMessageDialog(null, "La query " + sqlQuery + "

ha inserito " + row + " record");

//chiusura delle connessionirs.close();st.close();ps.close();mysql.closeConn();

}catch(ClassNotFoundException e){

javax.swing.JOptionPane.showMessageDialog(null, "Impossibile trovare il driver");

e.printStackTrace();}catch(SQLException e){

javax.swing.JOptionPane.showMessageDialog(null, "Impossibile stabilire una connessione con il server o con il database");

e.printStackTrace();}

}}

Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Bocchi CinziaUltimo aggiornamento: 20/07/2012

9