IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

insert sans commit?


Sujet :

JDBC Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Points : 205
    Points
    205
    Par défaut insert sans commit?
    Bonjour,

    En supposant avoir fait un setAutoCommit(false) sur ma connexion bd,
    j'aimerai savoir quel sont les commandes sql nécessitant un commit() pour être effectivement prise en compte sur la base?

    Je pose cette question car j'ai besoin de faire un ensemble de modification (insert) en base et si ca foire, je souhaite tout annuler. j'utilise donc le principe de la transaction: autocommit à false, on fait les insert, si ca marche on commit, sinon on rollback...

    or je constate qu'en effectuant un insert, peut importe que j'effectue un rollback juste après, l'insert est effectif en base!
    Et j'ai pas envie de faire plein de delete pour annuler les insert...
    L'insert est donc "vu" comme un alter pour la bd? pas besoin de commit pour être effectif?

    Quelqu'un peut m'expliquer?

  2. #2
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Salut.
    Normalement les ordre DML comme INSERT, UPDATE, DELETE sont transactionnels.
    Et les ordre DDL comme CREATE, ALTER ne sont pas transactionnels.
    Pour le reste t'a tout juste, le problème se trouve ailleurs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Si tu faits un insert direct, la màj de la table n'est effective qu'après un certain temps alors que si tu utilises commit la màj est effective dès que tu commit

  4. #4
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par Mengué georges Voir le message
    Si tu faits un insert direct, la màj de la table n'est effective qu'après un certain temps alors que si tu utilises commit la màj est effective dès que tu commit
    Ha non, surement pas. S'il n'y a pas de commit (ou implicite avec l'autocommit), les modifications ne seront jamais persistées

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    buggen > merci, c'est bien ce que je pensais... je vais effectivement faire un autre test demain. Il faudrait en effet que je vérifie ce point peut être :j'avais un toad de lancé parralelement (base oracle) et connecté à la base sous le même utilisateur que celui pour le code java...Il peut être donc possible que j'ai "vu" l'insert via toad mais uniquement en local et non comitté...enfin si je me fais comprendre

    georges & djsnipe > effectivement je ne pense pas qu'il y ait de magie la dessous, soit c'est automatique, soit il faut comitter!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Salut,

    Non non... l'insert est bien passé... j'ai fait le test avec un update: si je fait un rollback, l'update n'est bien pas pris en compte, mon problème ne se pose donc qu'avec des inserts....

    L'auteur de ce post semble avoir le même soucis que moi:
    http://www.developpez.net/forums/d64...nsaction-java/

    Quelqu'un a une idée?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    C'est bon j'ai trouvé: il s'avère qu'à un moment donné, je fermais la connexion et la rouvrais sans repasser l'autocommit à false... donc les insert étaient automatiquement commités.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle] Fermeture connexion sans COMMIT
    Par rapha51 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/03/2007, 17h55
  2. Réponses: 10
    Dernier message: 30/10/2006, 14h44
  3. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18
  4. Insertion sans connaitre la structure
    Par Alexandre T dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/10/2005, 10h58
  5. [Postgresql] insertion sans doublon
    Par Pwill dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/06/2005, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo