Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    19

    Problema con setAutoComit()

    Ciao a tutti, uso degli oggetti dao con un database SQL Server, e nel codice che vado a postare mi da errore "NullPointerException" sull'oggetto dnd, mentre se tolgo l'istruzione setAutoComit(false) il tutto funziona.
    Inoltre lo stesso oggetto dao funziona usando le transazioni associate con altri oggetti dao, ma con nDao no.
    Sapete se ci sono particolari problemi con le transazioni e sql server ?
    Lo utilizzo senza problemi con tutti gli altri archivi (tabelle) ma in questo caso ho riverificato tutto più volte ma non funziona (java -version 1.6.0).
    Lo stesso codice lo uso con altre tabelle e funziona.
    Ho verificato il codice SQL delle classi dao ma è giuso (anche perche se ometto il setAutoComit) la procedura funziona e aggiorna le due tabelle.
    Grazie
    codice:
    public void add(NestVO entry){
    		
    		// apro la connessione
    		Db dataBase = new Db(true);
    		
    		// apro docNr
    		DocNrPK docNrPK = new DocNrPK(DocNrDAO.DOCNR_NEST, 0);
    		DocNrDAO dnd = DocNrDAOFactory.getInstance();
    		
    		DocNrVO docNrVO = dnd.retrive(docNrPK, dataBase);
    		int newDocNr = docNrVO.getNrUltDoc();
    
    		// aggiorno docNr
    		newDocNr++;
    		docNrVO.setNrUltDoc(newDocNr);
    		docNrVO.setDtaUltDoc(new Date());
    	
    		// aggiorno dati input
    		entry.setIdNest(newDocNr);
    		
    		NestDAO nDao = NestDAOFactory.getInstance();
    		
    		// inizio la transazione
    		dataBase.setAutoComit(false);
    
    		if(nDao.add(entry, dataBase)){
    			if(dnd.update(docNrVO, dataBase)){
    
    				// chiudo la transazione
    				dataBase.commit();
    				
    				// aggiorno lo stato del model
    				this.nestVO = entry;
    				
    				// pulisco la lista nestOrd
    				//tblMdlNestOrd.clear();
    				
    				super.setChanged();
    			
    			}else{
    				dataBase.rollback();
    			}
    			
    		} else{	
    			dataBase.rollback();
    		}
    		
    		nDao = null;
    		dnd = null;
    		
    		// chiudo la connessione
    		dataBase.disconnetti();
    		dataBase = null;
    		
    		// notifico
    		super.notifyObservers();
    	}

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    19

    Risolto

    Risolto.
    A chi dovesse interessare, il problema non era sul codice postato ma sulla classe che implementa il nDao: non mi ricordavo di chiudere il relativo PreparedStatement.
    Con database access funziona ugualmente, ma con sqlserver, da quello che ho capito dal sito di microsoft, se passo alla stessa connection uno statement senza aver chiuso il procedente, viene creata (clonata ?) un'altra connessione e quindi la mia transazione iniziata sulla prima connessione tramite setAutoComit(false) non si chiude e mi da l'errore indicato.
    Questo (se sono riuscito a spiegarmi), a chi dovesse servire.
    Ciao

    codice:
    public boolean add(NestVO entry, Db dataBase) {
    		boolean result = false;
    		
    		if(dataBase.isConnesso()) {
    			
    			String sqlString = "INSERT INTO NestGen (idNest, dtaNest, descNest, "
    							+ "idMacc, noteNest, evaso) "
    							+ "VALUES (?, ?, ?, ?, ?, ?)";
    			try {
    				PreparedStatement stmt = dataBase.prepareStatement(sqlString);
    				
    				stmt.setInt(1, entry.getIdNest());
    				stmt.setDate(2, DateHelper.dateToSqlDate(entry.getData()));
    				stmt.setString(3, entry.getDescrizione());
    				stmt.setString(4, entry.getIdMacc());
    				stmt.setString(5, entry.getNoteNest());
    				stmt.setBoolean(6, entry.getEvaso());
    				
    				int n = stmt.executeUpdate();
    				if(n == 1) result = true;
    				
    				stmt.close();
    				stmt = null;
    
    			} catch (SQLException e) {
    				e.printStackTrace();
    				result = false;
    			} 		
    		}
    		return result;
    	}
    PS: la riga "stmt = null" è inutile scriverla secondo voi ?
    Grazie

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.