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 :

[JDBC2]le sql et java


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 24
    Points : 22
    Points
    22
    Par défaut [RESOLU][JDBC2]le sql et java
    En effet j'ai une table de 850000 lignes et je voudrais faire un update de chaque ligne afin renseigner un champ que j'ai ajouté qui est calculé a partir d'un champ deja present dans la table.
    Mais je ne sasi pas quelle strategie adopter pour le faire.
    Je travail en java et avec postgresql.
    ma premiere idee a ete de faire un select de toutes les lignes que je stock dans un vecteur et ensuite de faire une boucle pour toutes les mettre a jour.
    Mais lors du Select j'ai un depassement de memoire!!
    je cherche a eviter de faire de multiple select pour decouper le traitement de ma table(car chaque select prend du temps).
    Comment faire des update sur des grosses tables?




    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre régulier

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Points : 96
    Points
    96
    Par défaut
    Bonjour,
    A ma connaissance, il n'y a de moyen de faire cela mais tu peux toujours augmenter la taille de ton processus java avec l'argument -Xmx

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Je pense tu dois faire un select sur chaque ligne, mais utilise l'objet java PreparedStatement. Il te precompile ta requete, et cela te permet de la reutiliser tres rapidement.


    --
    Bicnic.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    willowII : oui je l'avais essayé mais ca ne suffit pas

    Non je pense que je vais faire comme je l'ai deja fait c'eat a dire decouper ma requete avec des conditions qui me renverront des vecteurs plus petits

    Merci pour votre aide.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    ton update est si complexe qu'il ne peu pas etre fais avec une requete SQL UPDATE de base ?

    Si le calcul de la modification est le même pour tous les enregistrements et
    si les critères de sélection sont les mêmes, alors un seul update suffiras

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update table salaire set augmentation=(salaire/100*8) where salaire < 2000
    Une requête de ce genre n'est pas envisagable dans ton cas ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    ton update est si complexe qu'il ne peu pas etre fais avec une requete SQL UPDATE de base ?
    Non hélas je dois modifier chaque ligne.
    en fait j'ai un champ date au format varchar que je veux convertir en date pour pouvoir faire des operations plus simplement sur cette table.
    Il est en format text parce que quelqu'un d'autre l'utilise avec crystal report et que c'est plus pratique pour lui.(ne me demandez pas pourquoi)

    Mais c'est quand meme étrange qu'on ne puisse pas traiter des grosses tables facilement en java!

    N'y a -t- il pas d'autre moyen que de faire un select qui renvoi un result set et ensuite de faire un while(rs.next()) et de recupeerer les champs qui nous interesse et de stocker cela dans un vecteur et ensuite de faire une boucle sur ce vecteur et de faire le traitement?

  7. #7
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Bonjour,
    En effet j'ai une table de 850000 lignes et je voudrais faire un update de chaque ligne afin renseigner un champ que j'ai ajouté qui est calculé a partir d'un champ deja present dans la table.
    Tu pourrais nous donner un exemple stp ? On pourra surement mieux voir ce qu'il en est.
    A priori, si tu ne peux pas le faire en JDBC, il est "peu probable" que tu puisse faire ton opération tout court.
    Cela signifierais en effet qu'aucune operation SQL (standard, voir spécifique au SGBD) n'est satisfaisante et qu'aucune aide "extérieure" (ODBC, JDBC, RowSet, etc.) non plus. JDBC etant, biensur, capable de te fournir tout cela.
    Bref, donne nous plus d'infos
    @+
    Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
    Merci de respecter les règles du club.
    Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    EUREKA !
    J'ai trouvé en fait avec jdbc2 on peut faire directement des operations
    sur le resultset.(mais il faut un driver compatible)
    je n'y avais pas pensé j'ai tellement l'habitude d'utiliser la methode "classique".
    Bref il faut que j'utilise la methode updateTypeJava(string nomcolonne,Typejava nouvellevaleur)

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

Discussions similaires

  1. conflit entre les classe java.sql.* et java.util.*;
    Par obydissonn dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2006, 18h00
  2. de java.sql.Date à java.utile.Date
    Par Sniper37 dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 23/05/2006, 16h10
  3. [JDBC] [PL/SQL] Interroger un PL/SQL en java
    Par Titouf dans le forum JDBC
    Réponses: 5
    Dernier message: 10/02/2006, 11h03
  4. Probleme SQL prepareStatement JAVA
    Par grizzz dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/08/2005, 11h29
  5. SQL Server: Java Erreur Socket
    Par BenoitM dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/04/2003, 16h32

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