Sei sulla pagina 1di 9

Creare una libreria per la connessione a un database MySQL

Interfaccia DbConnector
Linterfaccia 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> */

1
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

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 linterfaccia DbConnector e si occupa in modo specifico delle connessioni a MySQL. La struttura interna comprende: - la stringa che contiene il nome completo del driver, - loggetto che rappresenta la connessione creata, - la stringa che contiene lindirizzo dellhost, - le stringhe contenenti lo username e la password per accedere al database server.

2
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

3
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

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 classe public static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String PROTOCOL = "jdbc:mysql://"; //variabili di istanza private 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{

4
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

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{

5
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

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 unistanza di MySqlConnector MySqlConnector mysql = new MySqlConnector(host, username, password); oppure MySqlConnector mysql = new MySqlConnector(host);

2) Caricamento del driver mysql.loadDriver();

6
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

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 lesecuzione di statement SQL. TestMySqlConnector.java
package test; import import import import import java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException; 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,

7
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

password); 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 dati 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 NON PARAMETRICA CHE AGGIUNGE UNA RIGA ALLA TABELLA AUTORI*/ 'Rossi');"; sqlQuery = "INSERT INTO autori (nome, cogn) VALUES ('Paolo', try{

int row = st.executeUpdate(sqlQuery); //Stampa di row per verificare che sia stata aggiunta una riga (record) al database JOptionPane.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 dati System.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:");

8
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012

inserire:");

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

ps.setString(2,cognome); row = ps.executeUpdate(); //Stampa di row per verificare che sia stata aggiunta una riga (record) al database JOptionPane.showMessageDialog(null, "La query " + sqlQuery + " ha inserito " + row + " record"); //chiusura delle connessioni rs.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.

9
Bocchi Cinzia Ultimo aggiornamento: 20/07/2012