Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema connessione database

    Salve a tutti,
    sto impazzendo per un problema per la connessione ad un db.
    Vi posto le classi e poi vi spiego il problema
    codice:
    package schedule_database;
    
    import java.sql.*;
    import java.util.*;
    
    import schedule_database.DbGateway;
    import schedule_eccezioni.applException;
    
    public class DbManager implements InterfacciaCreazione, InterfacciaEliminazione, InterfacciaLettura{
    	
    	private QueryManager qm=null; //oggetto della classe QueryManager
    	private DbGateway dbg=null; //oggetto della classe DbGateway
    	
    	//costruttore
    	public DbManager(){
    		dbg=new DbGateway();
    		qm=new QueryManager(dbg);
    	}
    	
    	//connessione del database
    	public void ConnessioneDb() throws applException{
    		dbg.ConnessioneDb();
    	}
    	
    	//disconnessione del database
    	public void DisconnessioneDb() throws applException{
    		dbg.DisconnessioneDb();
    	}
    	
    	//rollback delle transazioni
    	public void ErroreRollback() throws applException{
    		dbg.ErroreRollback();
    	}
    	
    	
    	//recupera l'id del docente partendo dall'username e dalla password
    	public int OttieniId (String username, String password) throws Exception{
    		ResultSet risultato=null; //oggetto simile ad una tabella che conterrà i record recuperati dal database
    		int id_utente=0;
    
    		risultato=dbg.EsecuzioneQuery(qm.LoginUtente(username, password)); //impostazione ed esecuzione della query
    		
    		try{
    			if (risultato.next()){
    				id_utente=risultato.getInt(alias.docente_id); //in id_utente viene salvato l'id dell'utente corrispondente ad username e password
    			}
    		}
    		catch (SQLException e ){
    			throw new applException ("ERRORE nell'eseguire la query di lettura dell'utente con "+
    										"login "+username);
    		}
    		return id_utente;
    	}
    	
    	//recupera i dati di un docente
    	public HashMap<String, String> OttieniDatiDocente (Integer id_docente) throws applException, Exception{ //viene passato un Integer perchè poi dovrà essere convertito in stringa
    		ResultSet rs_risultato=null;
    		HashMap<String, String> mp_risultato=new HashMap<String, String>();
    		
    		try{
    			rs_risultato=dbg.EsecuzioneQuery(qm.OttieniDatiDocente(id_docente.intValue())); //creazione ed esecuzione della query
    				
    				//aggiunta uno ad uno degli degli attributi trovati nel db nella struttura hashmap
    			if (rs_risultato.next()){
    				mp_risultato.put(alias.docente_id, new String(id_docente.toString()));
    				mp_risultato.put(alias.docente_nome, rs_risultato.getString(alias.docente_nome));
    				mp_risultato.put(alias.docente_cognome, rs_risultato.getString(alias.docente_cognome));
    				mp_risultato.put(alias.docente_dipartimento, rs_risultato.getString(alias.docente_dipartimento));
    				Integer piano=new Integer (rs_risultato.getInt(alias.docente_piano));
    				mp_risultato.put(alias.docente_piano, new String (piano.toString()));
    				Integer stanza=new Integer (rs_risultato.getInt(alias.docente_stanza));
    				mp_risultato.put(alias.docente_stanza, new String (stanza.toString()));
    				mp_risultato.put(alias.docente_telefono, rs_risultato.getString(alias.docente_telefono));
    				mp_risultato.put(alias.docente_email, rs_risultato.getString(alias.docente_email));
    				mp_risultato.put(alias.docente_user, rs_risultato.getString(alias.docente_user));
    				mp_risultato.put(alias.docente_psw, rs_risultato.getString(alias.docente_psw));
    			}
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nell'eseguire la query di lettura dell'utente");
    		}
    		return mp_risultato;
    	}
    	
    	//recupera l'id del docente partendo dall'username
    	public int PrelevaIdDocente (String username) throws applException, Exception{
    		ResultSet risultato=null;
    		int id=0;
    		
    		try{
    			risultato=dbg.EsecuzioneQuery(qm.PrelevaIdDocente(username));
    			if (risultato.next())
    				id=risultato.getInt(1);
    			}
    		catch (SQLException e){
    			throw new applException ("ERRORE nell'esecuzione della query dell'utente");
    		}
    		return id;
    	}
    }
    
    
    
    package schedule_database;
    
    import java.sql.*;
    
    import schedule_eccezioni.applException;
    import schedule_util.*;
    
    
    public class DbGateway {
    	
    	ConfigurazioneSchedule config=new ConfigurazioneSchedule(); //oggetto per leggere dal file XML
    	
    	private static final String NOME_DRIVER="com.mysql.jdbc.Driver"; //nome del driver
    	public String NOME_SERVER=new String(); //nome del server
    	public String PORTA=new String(); //numero della porta del server
    	public String NOME_DATABASE=new String(); //nome del database
    	public String USERNAME=new String(); //username
    	public String PASSWORD=new String(); //password
    	
    	private String URL=new String(); //URL della stringa di connessione
    	private String STRINGA_CONNESSIONE=new String(); //stringa di connessione
    	
    	private Connection connessione=null;
    	private Statement statement=null;
    	private PreparedStatement pstmt=null;
    	
    	//costruttore
    	public DbGateway(){
    		this.NOME_SERVER=config.getPath("SCHEDULE"+".NOME_SERVER");
    		this.PORTA=config.getPath("SCHEDULE"+".PORTA");
    		this.NOME_DATABASE=config.getPath("SCHEDULE"+".NOME_DATABASE");
    		this.USERNAME=config.getPath("SCHEDULE"+".USERNAME");
    		this.PASSWORD=config.getPath("SCHEDULE"+".PASSWORD");
    		
    		if (NOME_SERVER==null){
    			this.NOME_SERVER=config.getPath("databanker.NOME_SERVER");
    		}
    		if (PORTA==null){
    			this.PORTA=config.getPath("databanker.PORTA");
    		}
    		if (NOME_DATABASE==null){
    			this.NOME_DATABASE=config.getPath("databanker.NOME_DATABASE");
    		}
    		if (USERNAME==null){
    			this.USERNAME=config.getPath("databanker.USERNAME");
    		}
    		if (PASSWORD==null){
    			this.PASSWORD=config.getPath("databanker.PASSWORD");
    		}
    		
    		this.URL="jdbc:mysql://" + NOME_SERVER + PORTA + "/" + NOME_DATABASE;
    		this.STRINGA_CONNESSIONE = URL + "?user=" + USERNAME + "&password=" + PASSWORD;
    	}
    	
    	//connessione
    	public void ConnessioneDb() throws applException{
    		try{
    			Class.forName(NOME_DRIVER); //carica il driver JDBC
    		}
    		catch (ClassNotFoundException e){
    			throw new applException ("ERRORE nel caricamento del driver JDBC");
    		}
    		try{
    			connessione=DriverManager.getConnection(STRINGA_CONNESSIONE); //creazione connessione al database
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nella connessione al database");
    		}
    	}
    	
    	public void ErroreRollback() throws applException{
    		try{
    			connessione.rollback();
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nell'operazione di rollback");
    		}
    	}
    	
    	//connessione del database
    	public void DisconnessioneDb() throws applException{
    		try{
    			connessione.close();
    			connessione=null;
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nella disconnessione al database");
    		}
    	}
    	
    	//impostazione della query
    	public PreparedStatement PreparaStatement(String query) throws applException{
    		try{
    			if ((query!=null) && (query!=""))
    				//punto in cui il programma si blocca perchè connessione=null
    				pstmt=connessione.prepareStatement(query); //imposta la query in pstmt di tipo PreparedStatement
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nella fase di preparazione della query");
    		}
    		return pstmt;
    	}
    	
    	//esecuzione della query
    	public ResultSet EsecuzioneQuery (PreparedStatement statement) throws applException{
    		ResultSet risultato=null;
    		
    		try{
    			if (statement!=null)
    				risultato=statement.executeQuery();
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE durante l'eliminazione delle tuple dalla tavola");
    		}
    		return risultato;
    	}
    	
    	
    	
    }
    
    
    
    package schedule_database;
    
    import java.sql.*;
    
    import schedule_eccezioni.*;
    
    public class QueryManager {
    	
    	private DbGateway dbg=null;
    	private String query=null;
    	
    	//costruttore
    	public QueryManager (DbGateway dbg){
    		this.dbg=dbg; //viene inizializzato il DbGateway perchè in questa classe si utilizza il metodo dbg.PreparaStatement
    	}
    	
    	public PreparedStatement LoginUtente (String username, String password) throws Exception{
    		PreparedStatement statement=null; //oggetto di tipo PreparedStatement per contenere la query
     
    		//creazione della query
    		query="SELECT * FROM " + alias.tabella_docenti + 
    		" WHERE (" + alias.docente_user + "=? and " + alias.docente_psw + "=?)";
    		
    		try{
    			System.out.println (dbg.PORTA+" "+dbg.NOME_DATABASE+" "+dbg.PASSWORD+" "+dbg.NOME_SERVER+" "+dbg.USERNAME);
    			statement=dbg.PreparaStatement(query); //impostazione della query
    			statement.setString(1, username);
    			statement.setString(2, password);
    		}
    		catch (SQLException e){
    			throw new applException ("ERRORE nella preparazione della query di lettura dell'utente "+username);
    		}
    		return statement;
    	}
    	
    	public PreparedStatement OttieniDatiDocente (int id_docente) throws Exception{
    		PreparedStatement statement=null;
    		
    		query="SELECT * FROM " + alias.tabella_docenti + "WHERE (" + alias.docente_id + "=?)";
    		statement=dbg.PreparaStatement(query);
    		
    		try{
    			statement.setInt(1, id_docente);
    		}
    		catch (SQLException e){
    			throw new Exception ("ERRORE nella preparazione della query");
    		}
    		return statement;
    	}
    	
    	public PreparedStatement PrelevaIdDocente (String username) throws Exception{
    		PreparedStatement statement=null;
    		
    		query="SELECT " + alias.docente_id + " FROM " + alias.tabella_docenti + " WHERE " + alias.docente_user + "=?";
    		statement=dbg.PreparaStatement(query);
    		
    		try{
    			statement.setString(1, username);
    		}
    		catch (SQLException e){
    			throw new Exception("ERRORE nella preparazione della query di lettura delle autorizzazioni " + "dell'utente con login " + username);
    		}
    		return statement;
    	}
    
    }

    Il problema è che la classe dbgateway effettua correttamente la connessione al db però nel metodo PreparaStatement della classe querymanager questa connessione viene persa. Infatti se in questo metodo si scrive System.out.println(connessione), come output in consolle avremo null.

    Cosa posso fare???? vi prego aiutatemi

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Vedi di riscrivere quell'oscenita' di post utilizzando l'apposito TAG [CODE] !!!

  3. #3
    Codice PHP:
    public DbManager(){
         
    dbg=new DbGateway();
         
    qm=new QueryManager(dbg);

    Dopo la creazione della istanza di DbGateway non viene richiamato il metodo ConnessioneDb() su dbg. Pertanto la variabile d'istanza connessione resta null.
    Al mio segnale... scatenate l'inferno!

  4. #4
    Originariamente inviato da Ed_Bunker
    Vedi di riscrivere quell'oscenita' di post utilizzando l'apposito TAG [CODE] !!!
    Bello stai tranquillo, è la prima volta che posto su html.it....quindi taci

  5. #5
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da stefano085
    Bello stai tranquillo, è la prima volta che posto su html.it....quindi taci
    A tacere, semmai, dovresti essere tu.
    Non sono ne' tuo fratello ne' tuo papa' per cui "bello" (Premesso che lo sono e anche molto) dillo a qualcun altro.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da stefano085
    Bello stai tranquillo, è la prima volta che posto su html.it....quindi taci
    Anzitutto, non si usa in questo modo il forum: per le comunicazioni private si usano i PVT (questo vale anche per Ed_Bunker).
    In secondo luogo, la scusante del primo post non è una scusante: esiste un regolamento (fra i link in evidenza, sempre all'inizio del forum) con scritto tutto quanto si debba sapere per postare, incluso l'utilizzo di tale TAG.
    Sebbene questo genere di "dimenticanze" vengano spesso tollerate, questo non significa che debba essere la norma del "primo post".

    Lascio aperta la discussione, modifico io il primo post e cerchiamo di rientrare in-topic.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    ho risolto...il problema è dovuto all'utilizzo delle interfacce....
    Grazie anche a chi invece di utilizzare i forum per dare risposte pensa a fare critiche....
    Sei un grande

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.