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

Java Discussion :

[MySQL] Après une requête depuis Java, l'entrée n'apparait pas dans la BDD


Sujet :

Java

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut [MySQL] Après une requête depuis Java, l'entrée n'apparait pas dans la BDD
    Bonjour,

    J'ai installé MySQL sur mon ordinateur pour me créer une BDD locale que je remplit grace à un logiciel Java. Le programme est très simple mais lorsque je fais un INSERT depuis le programme Java, il y a quelque chose de bizarre, l'entrée n'apparait pas, par contre l'identifiant est incrémenté, je m'explique :

    J'ai une table "indicateur" avec deux champs id (autoincrémenté) et valeur. Quand je fais un INSERT dans le Workbench de MySQL pas de soucis, j'ai par exemple l'id de l'entrée à 1. Puis j'execute mon programme Java qui lance un INSERT, rien ne se met et si je refait un INSERT depuis le Workbench l'id de l'entrée est 3. Preuve qu'il a vu passé le dernier INSERT.

    Voyez vous où est le problème ? Je met à tout hasard mon programme Java, mais je pense que c'est plus un pb d'interfaçage (j'ai pourtant bien mis la librairie) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    	public static void main(String[] args) {
     
    		(new BDD()).requeteUpdate("INSERT INTO `indicateurs`.`indicateur`				(				`id`	,	`valeur`)						VALUES						(			NULL,			" +
    				"\"6\"						);");
     
    	}
     
    .....
     
    public class BDD {
    	static Connection con;
     
    	BDD()
    	{
    		getConnexion();
    	}
     
     
    	public static void getConnexion()
    	{
    		//implementation
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch(Exception ex) { return; }
     
    		//connexion
    		String url = "jdbc:mysql://localhost:3306/indicateurs"; //jdbc:mysql://tnn-vcopilote:3306/cop_tenon_med
    		String user = "root";
    		String password = "root";
    		try {
    			con = DriverManager.getConnection( url, user, password ) ;
    			Fc.console("connexion à la BDD");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}		
    	}
     
     
    	 public static void requeteUpdate(String req) {
    		 //connexion BDD
    		    Connection conn = con;
     
    		    try {
    				conn.setAutoCommit(false);
    			    Statement st = conn.createStatement();
    			    st.executeUpdate(req);
     
    			    st.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					conn.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    			}
    		 }
     
    	  public static ResultSet requeteExecute(String req) {
    		    Connection conn = con;
    		    ResultSet rs = null;
     
    		    try {
    				conn.setAutoCommit(false);
    			    Statement st = conn.createStatement();
    			    rs = st.executeQuery(req);
     
    			    rs.close();
    			    st.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					conn.close();
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    			}
     
    			return rs;
    		 }
     
     
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Il y a dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conn.setAutoCommit(false);
    Tu vas donc devoir gérer tes commits/rollback à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    conn.commit()
    ou
    conn.rollback()

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    A premiere vue j'aurais dit qu'il manquait le commit(). Mais puisque l'id augmente je ne suis plus trop sure
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Citation Envoyé par wax78 Voir le message
    A premiere vue j'aurais dit qu'il manquait le commit(). Mais puisque l'id augmente je ne suis plus trop sure
    En fait, il me semble que (Je dis bien il me semble que) les autoincrement/séquences sont indépendant des transactions. Sinon si tu avais 2 transactions qui font l'autoincrement en même temps tu te retrouverais avec 2 fois le même ID => problème.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    En effet ca autoincrémente même si pas de commit()
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    génial, j'ai retiré mon conn.setAutoCommit(false); et ça fonctionne
    Merci beaucoup

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

Discussions similaires

  1. [MySQL] recuperer une partie de la chaine récupérée aprés d'aprés une requête MySQL
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/06/2009, 13h15
  2. [MySQL] Affichage personalisé aprés une requète Mysql.
    Par Caizzii dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/05/2007, 11h34
  3. Trier une table après une requête d’ajout
    Par Meduse dans le forum Access
    Réponses: 6
    Dernier message: 30/05/2006, 15h54
  4. Etat après une requête
    Par platoon64 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/05/2006, 14h03
  5. [MySQL] Afficher une date correctement après une requête
    Par Nerva dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/04/2006, 16h27

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