Connessione MySQL per applicazione java

di Anonimizzato12626 il
12 risposte
Salve,
ho un problema con questa classe per la connessione al database
//metodo per l'inizializzazione
public static void inizializzazzione(String FileName)throws IOException, FileNotFoundException, ClassNotFoundException
{
//crea una istanza della classe Properties
Properties properties = new Properties();

FileInputStream fileInputStream = new FileInputStream(FileName);

properties.load(fileInputStream);// si associa l'input stream all' istanza della classe properties

driver = properties.getProperty("driver");
url = properties.getProperty("url");
admin = properties.getProperty("admin");
passwd = properties.getProperty("passwd");

//carichiamo il driver del database con metodo statico forName della classe Class
Class.forName(driver);

}

/**
* Metodo per la connessione al database mysql
*/
public static Connection getConnection() throws SQLException
{
return DriverManager.getConnection(url, admin, passwd);

}

/**
* Metodo per la chiusura della connessione
*/
public static void closeConnection() throws SQLException
{
connection.close();
}


}

12 Risposte

  • Poi provo a testare la classe creata con questa

    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.SQLException;


    public class DBConnectionTest
    {
    public static void main(String[] args)
    {
    String fileName = "database.txt";


    try
    {
    ConnessioneDB.inizializzazione(fileName);
    }
    catch(IOException ioEx)
    {

    System.err.println(">>> IO Exception! <<<\n");
    System.err.println("Message: " + ioEx.getMessage());
    System.err.println("Stack trace: " + ioEx.getStackTrace());
    System.exit(1);
    }

    catch(ClassNotFoundException cnfEx)
    {
    System.err.println(">>> ClassNotFoundException! <<<\n");
    System.err.println("Message: " + cnfEx.getMessage());
    System.exit(1);
    }


    try
    {
    Connection connection = ConnessioneDB.getConnection();
    }

    catch(SQLException sqlEx)
    {
    System.err.println(">>> SQLException! <<<\n");
    System.err.println("SQLState: " + sqlEx.getSQLState());
    System.err.println("Message: " + sqlEx.getMessage());
    System.err.println("Error code: " + sqlEx.getErrorCode());
    System.err.println("Stack trace: " + sqlEx.getStackTrace());
    System.exit(1);
    }

    finally
    {
    try
    {
    ConnessioneDB.closeConnection();
    }

    catch(SQLException sqlEx)
    {
    System.err.println(">>> SQLException! <<<\n");
    System.err.println("SQLState: " + sqlEx.getSQLState());
    System.err.println("Message: " + sqlEx.getMessage());
    System.err.println("Error code: " + sqlEx.getErrorCode());
    System.exit(1);
    }
    }


    }

    }

    non riesco però a capire perché mi restituisce l'eccezione riguardo la chiusura...
    Exception in thread "main" java.lang.NullPointerException
    at connessionedb.ConnessioneDB.closeConnection(ConnessioneDB.java:73)
    at connessionedb.DBConnectionTest.main(DBConnectionTest.java:56)

    qualcuno saprebbe dirmi il perché e come risolvere.
    grazie
  • Poiche noi non abbiamo le righe e qui ti dice :

    at connessionedb.ConnessioneDB.closeConnection(ConnessioneDB.java:73)
    at connessionedb.DBConnectionTest.main(DBConnectionTest.java:56)

    dovresti postarci le istruzioni presenti alla riga 73 di ConnessioneDB e la riga 56 di DBConnessioneTest
  • Si allora

    per la riga 73 c' è il metodo di chiusura
    public static void closeConnection() throws SQLException
    {
    connection.close(); RIGA 73
    }

    per la riga 55 è della classe test( quella del metodo main)
    try
    {
    ConnessioneDB.closeConnection(); RIGA 56
    }
  • Mmm si sembra di capire da : ConnessioneDB.closeConnection();

    che , poiche li ti restituisce un null pointer exception , effettivamente la connessione non e' avvenuta e quindi provi a chiudere qualcosa che e' null
  • Prova a controllare che valore assume ConnessioneDB sul quale chiami la close...
  • Ah quindi non avviene la connessione,eventualmente sapresti dirmi come si può risolvere
  • Ah scusami non avevo letto...
  • Scusami ma non ho capito cosa dovrei fare
  • Certo che è null...
    
    try
    {
    Connection connection = ConnessioneDB.getConnection();
    }
    
    quando fai questa chiamata la visibilità della variabile connection è limitata
    a quel blocco try catch.

    Dichiarala come all' inizio della classe
    
    public class DBConnectionTest
    {
    	public static void main(String[] args)
    	{
    		String fileName = "database.txt";
    		Connection connection=null;
    
    
    in modo tale che nel blocco try catch puoi richiamarla in questo modo
    
    try
    {
    	connection = ConnessioneDB.getConnection();
    }
    
    e avrà visibilità su tutta la classe.


    Poi un'altra cosa...la
    
    public static void closeConnection() throws SQLException
    {
    connection.close();
    } 
    
    sul file inizializzazzione.java non ti funzionerà ugualmente perché la variabile connection è dichiarata solo su DBConnectionTest quindi devi passare come parametro in closeConnection
    
    try
    {
    	ConnessioneDB.closeConnection(connection);
    }
    
    quindi
    
    public static void closeConnection(Connection conn) throws SQLException
    {
    conn.close();
    } 
    
    Mi sa che è meglio se prendi un bel manuale e studi ancora un pochettino.
  • Le classi sono due una ConnessioneDB e l'altra per testare(quella con main) ConnessionDB naturalmente sono alle prime armi anche se
    effettivamente ci stavo arrivando che la visibilità era limitata infatti mi ero accorto che la connessione c'era semplicemente mettendo un if (connection != null)
  • Grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
12 risposte