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 lenteur JDBC / ACCESS / ResultSet next()


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut Problème lenteur JDBC / ACCESS / ResultSet next()
    Bonjour,
    Je developpe actuellemt une application JAVA lisant differentes informations sur une base de donnée acces.

    Voila la maniere dont je procede :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String url = "jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=//Chemindufichier/nom.mdb";	// Fichier sur un disque dur en reseau
    		try {
    			con = DriverManager.getConnection(url,"user","pass");
     
    			Statement s = con.createStatement();
    			ResultSet rs = s.executeQuery("SELECT DISTINCT nom FROM Table");
    			while (rs.next()) {
    				System.out.println("ResultSet : " + rs.getString(1));
    			}
    La creation de connexion n'est pas particulierement lente. Par contre, l'affichage de chaque resultat du ResultSet, l'est. J'ai en console environ 3 affichages par secondes.
    Du coup, l'affichage de l'ensemble des resultats met un temps fou. Je ne comprends pas pourquoi le fait de partcourir le ResultSet est aussi long. Suite au topic suivant http://www.developpez.net/forums/d59...ng-assez-lent/ j'ai essayé d'augmenter le fetch size de mon statement, mais j'obtiens systematiquement une java.sql.SQLException: Invalid Fetch Size. Quelqu'un aurait une idée pour améliorer tout ca ?
    Merci d'avance

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    mettre le fichier en local? Je pense que le driver odbc n'est pas particulièrement performant pour faire des accès aléatoires sur un fichier distant. Essaie déjà avec une copie locale du fichier pour voir si c'est plus rapide.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut
    Merci pour ton aide.
    Je viens d'essayer en mettant le ficher mdb en local, mais c'est toujours aussi lent.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    quelle est la taille de ta table? Y-a-t-il un index sur la colonne? Cette lenteur m'a plus l'air due à access qu'à java.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut SELECT DISTINCT ...
    Bonsoir,

    Un SELECT DISTINCT peut te plomber les performances si la table est grande.
    Essaye de mettre un index sur le champ "nom"
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Citation Envoyé par SebastianPx Voir le message
    Quelqu'un aurait une idée pour améliorer tout ca ?
    Changer de SGDB ? OK je sors

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quelle est la taille des données présente (nombre de colonne, nombre de lignes, nombre de tables) dans ta basse de donnée? Les driver acces c'est bien pour du prototypage vite fait, mais ca supporte affreusement mal la mise à l'échelle. De plus, le driver odbc utilisé pour accéder à access, ben la doc de sun dit clairement que ce driver n'est à utiliser que pour des test, en production, utiliser un driver natif (pas de bol, il n'en existe pas pour access)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Tu peux essayer ce driver : com.ms.jdbc.odbc.JdbcOdbcDriver (http://msdn.microsoft.com/fr-fr/libr...2h(VS.80).aspx)

    Si ça ne donne rien, à ta place je ferais quand même quelques mesures pour comparer le temps d'exécution de ta requête directement dans Access et dans ton appli java... en fonction du résultat tu pourras peut être t'orienter vers un autre SGBD !

    Si la mesure montre clairement que le problème vient de la communication entre l'appli et Access (et que tu veux rester sous Access) alors ça se complique : si tu ne trouves pas de driver correct, il te faut essayer de coder un morceau de code qui s'exécutera directement dans Access et qui communiquera avec ton application Java... bref, une usine à gaz ;-)

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Par défaut
    Me voila de retour après une petite absence. Tout d'abords merci pour vos réponses.
    Je peux malheuresement ni changer de SGBD (hélas) ni toucher a quoi que ce soit (index, …)
    Les requetes effectuées directement sur access, marche de maniere bien plus rapide. J'en deduis donc que le probleme vient de la communication access / java.
    Drhouse, je vais voir ce que ca donne avec ton driver, et je vous tiens au courant. Dans le cas ou ce driver ne fonctionne pas, y-a-t-il une solution, ou suis-je dans la merde ? (cf coder communication access / java )
    Merci encore pour vos réponses.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par documentation sun
    The JDBC-ODBC Bridge should be considered a transitional solution. Sun Microsystems and DataDirect Technologies are working to make the Bridge more reliable and robust, but they do not consider it a supported product. With the development of pure Java JDBC drivers, the JDBC-ODBC Bridge should become unnecessary.
    En gros, le driver jdbc/odbc de sun n'est pas prévu pour de la production, n'est pas fiable et n'est certainement pas performant. CA plus le fait qu'access n'a pas non plus la réputation d'être performatn, et t'as un duo gagnant. D'après ce que je sais, il existe d'autres vendeurs de pont odbc/jdbc, mais tu risque de devoir payer une licence.

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut Index encore
    Peux-tu tout de même nous dire combien de lignes dans la table en question ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Par défaut
    Citation Envoyé par SebastianPx Voir le message
    Drhouse, je vais voir ce que ca donne avec ton driver
    Hé, je travaille pas chez microsoft !!!!!!!

    Par contre je serais assez currieux de connaitre les temps d'exécution que tu as mesurés :
    - requête directement sous access
    - requête exécutée avec java et le driver jdbc/odbc
    (et la volumétrie de ta table et du résultat de la requête).

    Tout s'exécute sur la même machine ?

Discussions similaires

  1. [Toutes versions] Problème de lenteur avec Access plus de 2 Giga
    Par fofalaz dans le forum Access
    Réponses: 1
    Dernier message: 08/07/2014, 15h28
  2. [AC-2007] Problème lenteur access
    Par jclm230759 dans le forum Access
    Réponses: 23
    Dernier message: 07/07/2014, 09h41
  3. [AC-2007] Problème lenteur ACCESS 2007 avec tables Excel liées
    Par damsmut dans le forum Modélisation
    Réponses: 4
    Dernier message: 14/10/2009, 09h34
  4. Réponses: 1
    Dernier message: 04/04/2006, 10h28
  5. [JDBC] problème connexion à MS Access
    Par naz dans le forum JDBC
    Réponses: 7
    Dernier message: 03/10/2005, 10h06

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