Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81

    COMMIT, modifiche virtuali e non reali

    Salve ho un db access, e un software java che sto scrivendo che mi effettua le classiche operazioni effettuabili su un db.

    select * : funziona
    select for key: funziona
    insert,delete,update mi funzionano solo a livello virtuale nel senso che le operazioni vengono effettuate e non mi viene generata nessuna exception. tuttavia se apro il db invece i dati non sono stati inseriti/cancellati/aggiornati.

    Credo che il problema sia il commit roolback...che non so bene come funzionano. qualcuno puo' aiutarmi?

    ogni metodo è cosi composto:
    codice java
    try
    {
    codice java
    conn.committ();
    }
    catch (SQLException ex)
    {
    try
    {
    conn.rollback();
    System.out.println("errore, rollback eseguito");
    }
    catch (SQLException e)
    {
    System.out.println("errore, rollback non eseguito");
    }
    System.out.println("errore metodo ,sql");
    }


    dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Non vorrei dire una cafonata, ma:
    codice:
    conn.commit();
    }
    catch (SQLException ex)
    {
    try
    {
    conn.rollback();
    Se la commit non va a buon fine la rollback annulla l'ultima operazione fatta, che non è la commit di insert o quella che ha generato l'errore, ma quella precedente, rilasciando il db e rimuovendo qualsiasi blocco sul db.

    Quindi di logica, la insert ti da errore e quindi annulla l'operazione che hai fatto prima.

    Ripeto....spero di non dire una cafonata, ma l'unico motivo che mi viene in mente è questo.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    non mi è molto chiaro cio' che hai detto.

    quando io faccio una insert lo statement mi restituisce il numero di righeInserite e virtualmente mi da 1...dunque in teoria tutto è corretto...cio' che non funziona dovrebbe essere quel conn.commit...che pero' non mi va in exception. forse il codice e i blicchi try catch devo essere diversi

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    assmazz
    ...quando io faccio una insert lo statement mi restituisce il numero di righeInserite e virtualmente mi da 1...
    Tu sei certo di questo?
    in poche parole, viene lanciata un'eccezione e quindi ti fa la rollback, che oltre a "lasciare il db" annulla l'ultima operazione effettuata sul db ( questo ti è chiaro ).

    Quindi, prova a fare dei bei System.out.println per capire chi ti lancia l'eccezione e se l'eccezione viene lanciata.

    codice:
    }catch( Exception e ){
    e.printStackTrace();
    }
    Questo potrebbe darti una mano.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    prima di usare il commit e rollback il metodo terminava correttamente, per questo sono certo di cio' che dico. ho delle stampe in ogni catch e non ci entra mai.

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Ma senza usare la commit questa non ti aggiorna i dati??
    Anche perchè sinceramente non la utilizzo spesso, nel tuo codice java fai executeQuery() o qualcos'altro?
    Anche perchè executeQuery dovrebbe fare automaticamente la commit, quindi senza bisogno di renderla esplicita.....

    Altro sinceramente non saprei.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    Virtualmente me lo fa, ma realmente no.
    Utilitto executeUpdate per l'inserimento

  8. #8
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Se la commit non va a buon fine la rollback annulla l'ultima operazione fatta, che non è la commit di insert o quella che ha generato l'errore, ma quella precedente, rilasciando il db e rimuovendo qualsiasi blocco sul db.
    Non è proprio così.. o almeno non è molto chiaro.. se un inserimento genera una eccezione, viene eseguito il rollback, che ripristina il database allo stato dell'ultimo commit eseguito. Ma visto che il commit viene richiesto ad ogni operazione, l'unica operazione che viene influenzata è proprio l'inserimento.

    By default, new connections are in auto-commit mode.
    Questo è quanto sta scritto sulle api. Quindi tutta questa faccenda mi sembra strana.. Non dovrebbe essere necessario chiamare il commit dopo ogni inserimento.. Boh
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    81
    aldilà di questo come funziona il commit? giusto per capire come usarlo.

    cioè io alla fine delle operazione faccio il commit e ci metto un catch sql exception con dentro il rollback nel caso non mi va a buon fine?

  10. #10
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    @assmazz
    Si ho sbagliato...execute Update
    E le connection sonon autocommit, quindi non devi nuovamente lanciarla se non che tu abbia rimosso questa proprietà.
    Appunto, come dice Pastore12 Non c'è motivo per cui non lo faccia...non hai magari disabilitato l'auto commit nell'istanziare la Connection?
    A questo punto si provano tutte....
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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.