Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : J2EE struts import d'un grand nombre de données [ Divers / Général ] (zarmin)

vendredi 6 juillet 2007 à 13:54:50 | J2EE struts import d'un grand nombre de données

zarmin

Bonjour,

Je suis en train de developper un outil d'alimentation et je me retrouve confronter à un problème.

L'application prend en parametre un fichier formaté ainsi :

champs1|champs2|champs3 etc
Je parse ligne par ligne et j insère dans la base de données les champs. Jusqu'ici il n'y aucun problème sur des petits fichiers. Le problème se pose lorsque le fichier contient des milliers de lignes. Vers le 5000 enregistrement (environs) j'obtiens lerreur suivante :
java.sql.SQLException: Exception d'E/S: The Network Adapter could not establish the connection

Quelqu un aurait une idée car je me retrouve bloquer

Merci par avance

vendredi 6 juillet 2007 à 14:52:20 | Re : J2EE struts import d'un grand nombre de données

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Sûrement un problème de cache ou de mémoire : ferme tu la connection à chaque écriture ? Comment insère-tu dans la base de données ? Montre nous le code que tu utilise ce sera plus simple.



vendredi 6 juillet 2007 à 15:11:42 | Re : J2EE struts import d'un grand nombre de données

zarmin

Lecture du fichier
Code :
            BufferedReader reader = new BufferedReader(new FileReader(file[0]));
                while ((currentLine = reader.readLine()) != null) {
                   TraitementDonnees(ligneBuffer, NomdeLaTable, ListeChamps, idAlim);
                }

TraitementDonnees appelle :

    public String alimentationTest(String[] Data, MyUser user, int idAlim)
            throws AlimentationServiceException {
        Connection connection = null;
        String result = "";
        try {
            DataSource dataSource = getDataSource();
            connection = dataSource.getConnection();
            AlimentationImportOM alimentationOM = new AlimentationImportOMImpl();
            alimentationOM.setConnection(connection);
            alimentationOM.setLogger(log);
            if (alimentationOM.checkExistant(Data[0]))
                result = alimentationOM.alimUpdate(Data, user, idAlim);
            else
                result = alimentationOM.alimInsert(Data, user, idAlim);

        } catch (SQLException e) {
            log.error(e.getMessage(), e);
            throw new AlimentationServiceException(e.getMessage(), e);
        } catch (LookupException e) {
            log.error(e.getMessage(), e);
            throw new AlimentationServiceException(e.getMessage(), e);
        } finally {
            try {
                connection.close();
            } catch (Throwable t) {
                log.error(t.getMessage(), t);
            }
        }
        return result;
    }

    private static final String DB_REQUEST_ALIM_EXIST = "SELECT COUNT(CUR) FROM TABLE WHERE CUR=?";

    private static final String DB_UPDATE_ALIM = "UPDATE TABLE "
            + "SET DATA=?  WHERE CUR=?";

    private static final String DB_INSERT_ALIM= "INSERT INTO TABLE (DATA) "
            + " VALUES (?) ";

    public boolean checkExistant(String cur) throws LookupException {
        PreparedStatement pStmt = null;
        ResultSet rs = null;
        boolean isExist = false;

        try {
            pStmt = connection.prepareStatement(DB_REQUEST_ALIM);

            pStmt.setString(1, cur);
            rs = pStmt.executeQuery();
            while (rs.next()) {
                isExist = true;
            }

        } catch (SQLException sqlException) {
            getLogger().error(DB_REQUEST_ALIM_EXIST_PORTEE, sqlException);
            throw new LookupException(sqlException.getMessage(), sqlException);
        } catch (Throwable throwable) {
            getLogger().error(DB_REQUEST_ALIM_EXIST_PORTEE, throwable);
            throw new LookupException(throwable.getMessage(), throwable);
        } finally {
            try {
                rs.close();
                pStmt.clearParameters();
                pStmt.close();
            } catch (Throwable throwable) {
                getLogger().error(throwable.getMessage(), throwable);
            }
        }
        return isExist;
    }

    public String alimUpdate(String[] data, int idAlim)
            throws LookupException {
        PreparedStatement pStmt = null;
        ResultSet rs = null;
        try {
            pStmt.setString(4, data[0]);
            rs = pStmt.executeQuery();
        } catch (SQLException sqlException) {
            getLogger().error(DB_UPDATE_ALIM, sqlException);
            throw new LookupException(sqlException.getMessage(), sqlException);
        } catch (Throwable throwable) {
            getLogger().error(DB_UPDATE_ALIM, throwable);
            throw new LookupException(throwable.getMessage(), throwable);
        } finally {
            try {
                if (rs != null)
                    rs.close();
                pStmt.clearParameters();
                pStmt.close();
            } catch (Throwable throwable) {
                getLogger().error(throwable.getMessage(), throwable);
            }
        }
        return "OK";
    }

    public String alimInsert(String[] data, MyUser user, int idAlim)
            throws LookupException {
        PreparedStatement pStmt = null;
        ResultSet rs = null;

        try {
            pStmt = connection.prepareStatement(DB_INSERT_ALIM);
            pStmt.setString(1, data[0]);

            rs = pStmt.executeQuery();
        } catch (SQLException sqlException) {
            getLogger().error(DB_INSERT_ALIM, sqlException);
            throw new LookupException(sqlException.getMessage(), sqlException);
        } catch (Throwable throwable) {
            getLogger().error(DB_INSERT_ALIM, throwable);
            throw new LookupException(throwable.getMessage(), throwable);
        } finally {
            try {
                if (rs != null)
                    rs.close();
                pStmt.clearParameters();
                pStmt.close();
            } catch (Throwable throwable) {
                getLogger().error(throwable.getMessage(), throwable);
            }
        }
        return INSERT;
    }



vendredi 6 juillet 2007 à 15:27:01 | Re : J2EE struts import d'un grand nombre de données

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
A première vue, je dirais que ca vient de cette fonction :
public boolean checkExistant(String cur) throws LookupException {
        PreparedStatement pStmt = null;
        ResultSet rs = null;
        boolean isExist = false;

        try {
            pStmt = connection.prepareStatement(DB_REQUEST_ALIM);

            pStmt.setString(1, cur);
            rs = pStmt.executeQuery();
            while (rs.next()) {
                isExist = true;
            }

        } catch (SQLException sqlException) {
            getLogger().error(DB_REQUEST_ALIM_EXIST_PORTEE, sqlException);
            throw new LookupException(sqlException.getMessage(), sqlException);
        } catch (Throwable throwable) {
            getLogger().error(DB_REQUEST_ALIM_EXIST_PORTEE, throwable);
            throw new LookupException(throwable.getMessage(), throwable);
        } finally {
            try {
                rs.close();
                pStmt.clearParameters();
                pStmt.close();
            } catch (Throwable throwable) {
                getLogger().error(throwable.getMessage(), throwable);
            }
        }
        return isExist;
    }

Tu ne ferme jamais ton resultset (rs) et ton statement (pStmt). Donc forcément au fur et à mesure, la mémoire grimpe jusqu'à arriver à un OutOfMemory ! Java a un garbage collector, mais il ne peux pas libérer les ressources d'une connection encore ouverte !

vendredi 6 juillet 2007 à 15:32:56 | Re : J2EE struts import d'un grand nombre de données

zarmin

Euh je comprend pas je fais bien
finally {
            try {
                rs.close();
                pStmt.clearParameters();
                pStmt.close();
            } catch (Throwable throwable) {
                getLogger().error(throwable.getMessage(), throwable);
            }

Donc pour moi quoiqu'il se passe le resultatset et le statement sont fermés non ?

vendredi 6 juillet 2007 à 15:54:28 | Re : J2EE struts import d'un grand nombre de données

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Au temps pour moi, j'ai pas fait gâffe au bloc finally !


Bon alors je vois pas trop d'où ca peut venir...

Un petit truc au passage, tu fais :
public String alimUpdate(String[] data, int idAlim)
            throws LookupException {
        PreparedStatement pStmt = null;
        ResultSet rs = null;
        try {
            pStmt.setString(4, data[0]);


Ca cà te provoque un NullPointerException, non ?

vendredi 6 juillet 2007 à 15:57:49 | Re : J2EE struts import d'un grand nombre de données

zarmin

Hum non c'est jsute que j'ai simplifié le code et donc supprimé quelques lignes supperflues (ou pas !) Il y a bien une initialisation

Je me demandai si le fait de réduire le nombre de connection (une connection est ouverte à chaque ligne sur des fichiers de 20000 lignes ca fait en fait autant)  ne pouvait pas régler ce problème ?



Cette discussion est classé dans : problème, données, struts, import, j2ee


Répondre à ce message

Sujets en rapport avec ce message

plugin struts [ par kawtar_ch ] Bonjour!!je suis débutante en J2EE, je travaille sur une application web en J2EE, j'aimerai travailler avec Struts, mais le problème c'est que je n'ai structure de données [ par safisa ] Boujour tous le monde;j'ai un ptit problème avec le tri topologiquemon problème :est ce que je dois utiliser une queue ou une pile pour faire le tri d probleme struts [ par abdo77 ] Bonjour tout le monde, voila, j'ai un peti probleme qui me bloque pendant une semain, j'ai besoin de votre aide.j'arrive pas a stocker une valeur dans probleme struts sous eclipse 3.3.3 europa [ par abdo77 ] merci de votre aideje travaille avec eclipse 3.3.2mon probleme est que les get et set de la la classe actionFrom ne fonctionnne pas bien.package med.d Communication Applet et PHP [ par tdjo ] Bonjour à tous ,Voila mon problème j'ai une applet que je lance dans une page web (jusque là pas de problème) mais ensuite je voudrais faire communiqu Problème d'upload (input text + file) [ par hh4life ] Bonjour,J'utilise l'environnement technique suivant :- IDE : Eclipse- Serveur d'application : Jboss 4.0.5 avec conteneur Tomcat 5.5.20Les pages sont e application j2ee et codage [ par titan82 ] bonjour,je dois faire une application j2ee qui consiste à informatiser une reception d'un établissement.on a des formulaires à remplir (jsp) et lorsqu j2ee /struts [ par kawti ] bonsoir, je developpe acuellement une application web avec le framework struts,je suis debutante en j2ee et j'ai rencontrer des problémes en programat problème avec net.sf.hibernate [ par lucky82 ] Bonjour les amis, Je voudrais connaitre la librairie de laquelle On importe les classes suivantes: J2EE et Eclipse, problème taglib [ par Diabolus ] Bonjour à tousJe débute en J2EE et j'ai un problème avec mon projet sous Eclipse que je ne connais pas bien.Mes taglib ne sont pas pris en compte.Quan


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.