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 :

MySql : "SET SESSION variable" n'a pas d'effet !


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 16
    Points
    16
    Par défaut MySql : "SET SESSION variable" n'a pas d'effet !
    Salut,

    Je travaille actuellement sur un client java utilisant jdbc pour insérer un volume important de données dans une table Mysql.

    Mon choix est d'insérer plusieurs lignes en meme temps en utilisant cette syntaxe : "INSERT INTO table (a,b) VALUES (1,2),(3,4),(5,6)..."

    J'envoie donc à mysql des requetes insert volumineuses dont la taille dépasse parfois la limite par défaut de mysql nommée max_allowed_packet (= 1M).

    J'ai donc tenté de modifier cette valeur uniquement pour la session en cours, juste avant d'envoyer ma grosse requete, mais il semble que cela n'a pas d'effet et que j'obtiens toujours le message d'erreur de mysql.

    Voila mon code java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // increase max_allowed_packet to 8M 
    Statement stmtSet = connection.createStatement(); 
    stmtSet.execute("SET SESSION max_allowed_packet = 8 * 1024 * 1024;");	
     
    // check if value was changed	
    Statement stmtShow = connection.createStatement(); 
    ResultSet rs = stmtShow.executeQuery("SHOW SESSION VARIABLES like 'max_allowed_packet'"); 
    rs.next();	
    System.out.println(rs.getString(1)+"="+rs.getString(2));	
     
    // try to execute the big insert	
    Statement stmtInsert = connection.createStatement(); 
    stmtInsert.executeUpdate(bigInsert));

    Et ce qu'il affiche :
    max_allowed_packet=8388608
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4796533 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2655)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1604)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260)

    Comme vous pouvez voir max_allowed_packet a bien été changé en 8M mais j'ai toujours l'erreur PacketTooBigException, bien que mon INSERT ne fasse que 4M.

    Et pourtant tous les Statement ci-dessus sont bien exécutés dans la meme session mysql (ou plutot la meme java.sql.Connection).

    Si quelqu'un a une idée de ce qui cloche, ce serait grandement apprécié !

    Merci bcp !

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    ok problème résolu c'était bien un bug de mysql :
    http://bugs.mysql.com/bug.php?id=22891

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

Discussions similaires

  1. Quote dans macro-variable
    Par fafabzh6 dans le forum Macro
    Réponses: 3
    Dernier message: 23/04/2009, 17h39
  2. [MySQL] Problème de rquête avec Quôte
    Par yom17 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 23/10/2006, 10h58
  3. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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