Newsgroup: it.comp.java
Titolo: Test connessione a db

Ciao
sto provando per la prima volta a interagire con un db (per ora vuoto) e 
ho queste due classi che ci avea fornito il prof per la connessione al 
db e il test della connessione, le ho modificate secondo necessitï¿œ, perï¿œ 
se provo ad eseguire DBConnectionTest ottengo:
 
Exception in thread "main" java.lang.NullPointerException
	at tablemanager.DBConnection.closeConnection(DBConnection.java:84)
	at tablemanager.DBConnectionTest.main(DBConnectionTest.java:84)
Java Result: 1
 
Le righe summenzionate le ho evidenziate con un commento.
Non riesco a capire perchï¿œ, mi potete aiutare? Grazie.
 
 
CLASSE DBConnectionTest
 
import java.sql.Connection;
import java.sql.SQLException;
import java.io.IOException;
public class DBConnectionTest
{
 
   public static void main(String[] args)
   {
     String fileName = "properties.txt";
 
     try
     {
       DBConnection.init(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 = DBConnection.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
       {
         DBConnection.closeConnection(); //riga incriminata1
       }
       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);
       }
     }
   }
}
 
---------------------------------------------------------------------------------------
CLASSE DBConnection:
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Properties;
 
public class DBConnection {
 
   private static Connection connection;
   private static String driver;
   private static String url;
   private static String admin;
   private static String adm_passwd;
 
   public static void init(String fileName)
           throws IOException, FileNotFoundException, ClassNotFoundException
   {
     Properties properties = new Properties();
     FileInputStream fileInputStream = new FileInputStream(fileName);
     properties.load(fileInputStream);
     driver = properties.getProperty("driver");
     url = properties.getProperty("url");
     admin = properties.getProperty("admin");
     adm_passwd = properties.getProperty("admin_passwd");
     Class.forName(driver); // carica il driver
   }
 
   public static Connection getConnection() throws SQLException
   {
     return DriverManager.getConnection(url, admin, adm_passwd);
   }
 
   public static void closeConnection() throws SQLException
   {
     connection.close(); //riga incriminata 2
   }
 
}

 Non riesco a capire perché, mi potete aiutare? Grazie.
 
è perché la connessione è null, evidentemente perché la getConnection 
fallisce. il motivo di ciò non è visibile perché intercetti e nascondi 
tutti gli errori, presumo perché non hai il driver del database nel 
classpath.
 
 


il driver del database (ti riferisci al jdbc connector?) è nella 
cartella dell'applicazione
ma non penso che il problema sia quello anche perché quando non riusciva 
a trovarlo me lo diceva chiaro (ho avuto questo problema all'inizio, poi 
ho risolto)
 
 
 
 

 ho risolto)
 
 
preciso che il db esiste, ma è vuoto
 

La variabile static Connection in DbConnection non viene instanziata da 
nessuna parte per cui ï¿œ null come ti dice l'Exception, per cui basta 
fare la modifica :
 
 >    public static Connection getConnection() throws SQLException
 >    {
 >      return connection =DriverManager.getConnection(url, admin, 
adm_passwd);
 >    }
 
e scrivere semplicemente : DBConnection.getConnection();
 
ciao


funziona...
grazie!