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 :

ResultSet (rs.next() ) trop trop lent


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 88
    Points : 53
    Points
    53
    Par défaut ResultSet (rs.next() ) trop trop lent
    Bonjour,
    J'ai une table qui contient 3 colonnes avec 15 000 enregistrements. Il existe un index sur l'une de ses colonnes (n° de séquence)

    Je dois faire un SELECT * FROM MATABLE WHERE TOTO=? (? = 0 ou 1).

    Lorsque je parcours rs.next, que je récupère les 3 valeurs pour les mettre dans un bean puis l'ajouter dans une arraylist, cela me prend 580 sec soit 10min pour 15 000 enregistrements !!


    Voici le code:
    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
     
    		Collection results = new ArrayList(8000);
     
    		Connection connection = null;
    		PreparedStatement statement = null;
    		ResultSet rs = null;
    		try {
    			// Préparation de la requete
    			connection = ConnectionUtil.getConnection();
     
    			statement = connection.prepareStatement(REQUETE_SELECT, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     
    			if (manu)
    				statement.setString(1, "1");
    			else
    				statement.setString(1, "0");
     
    			rs = statement.executeQuery();
     
    			long avant = System.currentTimeMillis();
    			logger.info("Avant:" + avant);
     
    	         //[GEI] Optimisation test
    	         //rs.setFetchSize(1000);
    	         //rs.last();
    	         //rs.beforeFirst();
    	         // [/GEI] Fin de l'optimisation test
     
    			// Boucle sur les resultats
    			while (rs.next()) {
    				TempSprintDTO dto = new TempSprintDTO();
    				dto.setId(rs.getInt(1));
    				dto.setLigne(rs.getString(2));
    				dto.setManu(manu);
     
    				results.add(dto);
    			}
     
    			long apres = System.currentTimeMillis();
    			logger.info("Apres:" + apres);
    			logger.info("Difference:" + (apres - avant));
    		}
    		catch (SQLException e) {
    			throw e;
    		}
    		finally {
    			if (rs != null)
    				rs.close();
    			if (statement != null)
    				statement.close();
    			if (connection != null)
    				connection.close();
    		}
     
    		return results;

    J'ai pensé au fetchSize qui est de "10" je crois pas défaut en le forcant à 1000 mais rien n'y fait.
    J'utilise le serveur weblogic8 et comme driver odbc le driver weblogic oracle (en 2 phases commit)

    Vous avez des idées ?

  2. #2
    Membre habitué Avatar de TheBlue
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 167
    Points : 147
    Points
    147
    Par défaut
    Bonjour.
    Tu n'as pas essayé si ça a un rapport avec ton IDE utilisé (eclipse par exemple qui est trop lent, enfin pour moi ) ou avec la Base de données utilisée.
    Sinon qu'en est il de ton problème ?
    Merci

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    As-tu essayé de lancer la requête via le prompt SQL de ta base de données ? Si oui combien de temps cela prend-il ?

    Citation Envoyé par anadeveloppeur
    Tu n'as pas essayé si ça a un rapport avec ton IDE utilisé (eclipse par exemple qui est trop lent, enfin pour moi )
    Le ne vois pas le rapport entre eclipse et les performances d'un application développée avec...

    a++

  4. #4
    Membre habitué Avatar de TheBlue
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 167
    Points : 147
    Points
    147
    Par défaut
    Citation Envoyé par adiGuba
    Salut,
    ...
    Le ne vois pas le rapport entre eclipse et les performances d'un application développée avec...

    a++
    je crois qu'il y a le rapport ;-) par exemple sous VB, la durée que le programme prend pour se charger en l'exécutant en déboggage par le Visual Studio est beaucoup plus que celle en l'exécutant directement (appliquer l'exécutable dans le dossier bin, je parle de VB.Net) Bref, ce n'est qu'un exemple.

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par anadeveloppeur
    je crois qu'il y a le rapport ;-) par exemple sous VB, la durée que le programme prend pour se charger en l'exécutant en déboggage par le Visual Studio est beaucoup plus que celle en l'exécutant directement (appliquer l'exécutable dans le dossier bin, je parle de VB.Net) Bref, ce n'est qu'un exemple.
    Lorsque tu lances l'appli en déboggage... J'espère quand même que pour des tests de performance il ne lance pas l'application en déboggage...

    a++

Discussions similaires

  1. [XL-2003] Macro boucle for next trop lente
    Par sixtm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2011, 17h08
  2. [ResultSet] premier next() super long
    Par promopub dans le forum JDBC
    Réponses: 4
    Dernier message: 30/04/2008, 16h49
  3. [Publicité] Trop trop bien, cette pub!
    Par Biosox dans le forum Films & TV
    Réponses: 4
    Dernier message: 03/12/2007, 14h09
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

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