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 :

chercher dans un resultSet ou requete SQL sur un resultSet ?


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut chercher dans un resultSet ou requete SQL sur un resultSet ?
    Bonjour,
    est-il possible de vérifier dans le ResultSet l'existence d'une valeur dans un champ ?
    je m'explique :
    j'ai un fichier en entrée qui contient des données (identifiant) qui doivent être purgé dans la base.
    je lit le fichier ligne par ligne, et j'obtiens les 20 premiers caractères de chaque ligne qui doivent correspondre au identifiant.
    avant d'effectuer la purge de cet identifiant, je dois d'abord vérifier si cet enregistrement répond aux critère de la purge.
    pour l'instant mon application ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ........................
    //lecture d'une ligne du fichier
    valeur = line.substring(0, 20); // qui est mon identifiant
    purge(maTable, monChamp, maValeur);
    .....................
    public void purge(String table, String champ, String valeur){
    ...........................
    executeUpdate("delete from "+table+" where "+champ+"='+valeur+"'");
    .............................
    }
    je peut faire une requête SQL dans la méthode purge pour que seul les valeur répond au critère de la purge peuvent être purgés genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete from table 
    where champ=valeur and champ in(select champ from table where mon critère)
    mais cette requête sera appelée autant de fois qu'il y a de lignes à purgés et sa affecte la performance de mon application.
    Bref
    je veux commencer par sélectionner les données qui répond à la purge, les mettre dans un resultSet, et à partir de ça, ne purgé que la ligne qui est dans le resultSet genre :
    [CODE]//lecture d'une ligne du fichier
    valeur = line.substring(0, 20); // qui est mon identifiant
    if(valeur est dans le resultSet) {
    purge(maTable, monChamp, maValeur);
    }
    /CODE]
    ou dans la methode purge, faire un select sur le resutSet
    Merci

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Par défaut Peut-être une piste
    Ajoutez un champ boolean dans votre table, [ASupprimer] par exemple, avec FALSE pour valeur par défaut.
    Faites une première requete qui va mettre à TRUE le champ ASupprimer de votre table à partir de votre fichier en composant une requete à ralonge du type WHERE identifiant=xxx OR identifiant=yyy, ou bien passez par une transaction dans laquelle vous cumulerez autant de lignes UPDATE à TRUE le champ ASupprimer que de valeur lues et retenues de votre fichier texte.
    Après cela, il suffira de faire un DELETE sur tous les enregistrements dont le champ ASupprimer est TRUE.
    De toutes façons, si vous devez scruter 2000 identifiants dans votre fichier texte qui sont fatalement différents, il n'y a pas de miracle, vous devrez agir au niveau de la base de données ligne par ligne.
    Ajouter le champ ASupprimer pourrait devenir plus opportun si vous trouviez un moyen de le mettre à TRUE dans la procédure qui génère votre fichier texte. Cela dépend d'où vient ce fichier listing.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 292
    Par défaut
    Merci pour ta réponse,
    j'ai préféré faire une requête select sur les enregistrement apte a la purge (selection des identifiant qui sont des String), ensuite à partir du resultSet je les mis dans une list<String> .
    je récupère chaque ligne du fichier, et je vérifie si l'enregistrement est dans la liste (list.contains)
    Merci

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 30/01/2012, 18h41
  2. Réponses: 2
    Dernier message: 08/11/2007, 10h54
  3. Réponses: 2
    Dernier message: 08/11/2007, 10h54
  4. Requete SQL sur une table dont le nom est dans une autre table
    Par orangepresse dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2007, 13h32
  5. Réponses: 2
    Dernier message: 03/05/2004, 12h13

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