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 :

Problème de mémoire


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut Problème de mémoire
    Bonjour à tous,

    J'utilise jdbc pour effectuer des insertions dans une table qui contient un champ de type LONBLOB. J'insère donc des fichiers dans la table. J'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    InputStream stream = obj.getInputStream();
    PreparedStatement pstmt = connection.preparedStatement("INSERT INTO file(file_id,name, body) VALUES( ?, ?, ?)");
     
    					int len = obj.getFileSize();
    					pstmt.setNull(1, attachId);
    					pstmt.setString(2, attachName);
    					pstmt.setBinaryStream(3, stream, len);
    					pstmt.executeUpdate();
    					stream.close();
    Je n'ai pas de soucis pour les petits fichier, mais avec des fichiers volumineux, j'obtiens l'erreur suivante sur la console :

    HTTP JVM: JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
    HTTP JVM: Exception in thread "AgentThread: JavaAgent"
    HTTP JVM: java.lang.OutOfMemoryError
    HTTP JVM: at
    HTTP JVM: com.mysql.jdbc.Buffer
    HTTP JVM: .
    HTTP JVM: ensureCapacity
    HTTP JVM: (
    HTTP JVM: Buffer.java
    HTTP JVM: :
    HTTP JVM: 1
    HTTP JVM: 2
    HTTP JVM: 3
    HTTP JVM: )
    HTTP JVM: at
    HTTP JVM: com.mysql.jdbc.PreparedStatement
    HTTP JVM: .
    HTTP JVM: fillSendPacket
    HTTP JVM: (
    HTTP JVM: PreparedStatement.java

    ...


    Avez-vous une idée svp ? Peut on insérer de gros fichiers avec jdbc ?

    Merci.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Faut toujours spécifier son environnement de developpement avant de poser la question. Quel est le tien? es tu en dev? si oui quel IDE utilises tu? ton pb pourrait être lié à la mémoire qui n'est pas assez dimensionnée.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    Mon serveur mysql est sous linux, les accès à la base mysql se font depuis des agent développés en java sur un serveur domino égallement installé sous linux.

    Je développe les agents en java sous eclipse, j'utilise la librairie mysql-connector-java-5.1.15 pour les acces mysql jdbc.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    Déjà il y a la FAQ pour l'erreur.

    Sinon pensez à toujours libérer les ressources dans un block finally pour éviter les problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    InputStream stream = obj.getInputStream();
    try {
        PreparedStatement pstmt = connection.preparedStatement("INSERT INTO file(file_id,name, body) VALUES( ?, ?, ?)");
        int len = obj.getFileSize();
        pstmt.setNull(1, attachId);
        pstmt.setString(2, attachName);
        pstmt.setBinaryStream(3, stream, len);
        pstmt.executeUpdate();
    } finally {
        stream.close();
    }
    Idem avec la connection ...

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    que je sache, le protocole mysql est tel que l'intégralité du fichier doit tenir en mémoire avant d'être envoyé.

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    Bonjour à tous,

    Tout d'abord merci pour vos réponses.

    Je reviens vers vous suite à mon problème de mémoire.

    En allouant plus de mémoire à la JVM, je n'ai plus le message d'erreur de type OutOfMemory, en revanche, j'ai une autre erreur :

    HTTP JVM: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    HTTP JVM: The last packet successfully received from the server was 37,006 milliseconds ago. The last packet sent successfully to the server was 45,707 milliseconds ago.


    Toujours aucun problème pour les petits fichiers.

    Cette erreur apparait au bout d'un certain temps, pendant le chargement.

    Avez vous une idée ?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    Apparemment il serait possible d'augmenter le wait_timeout et interactive_timeout du serveur mysql, je vais tenter ça.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    En augmentant les variables wait_timeout et interactive_timeout, j'ai toujours le problème.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Vous avez bien ajusté max packet size sur votre serveur pour que ca corresponde aux plus gros fichiers que vous aurez à gérer?

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Points : 69
    Points
    69
    Par défaut
    Oui j'ai bien modifié le max_packet_size sur mon serveur.

Discussions similaires

  1. [WORD]Problème de mémoire
    Par Dnx dans le forum VBA Word
    Réponses: 17
    Dernier message: 05/10/2005, 14h48
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [Crystal Report]Problème de mémoire avec le moteur RDC
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/05/2005, 09h09
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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