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 :

Comparer deux tables


Sujet :

JDBC Java

  1. #1
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut Comparer deux tables
    Bonjour,

    Je souhaite effectuer une comparaison de deux tables, une table de référence et une table de travail.

    Pour cela je fais un select * sur ma table de travail, et pour chaque ligne récupérée, je fais un select sur ma table de référence. Si je trouve des données je supprime la ligne de la table de travail, sinon je créé la ligne dans la table de référence.

    Voici mon 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
     
    String query = "select * from AG_ATF.dbo.ATF_SUIVI_WORK";
     
    statement = (SQLServerStatement) connect.createStatement();
    resultSet = (SQLServerResultSet) statement.executeQuery(query);
     
    while (resultSet.next()) {
    	resultSet.getInt("ID_ADHERENT");
    	resultSet.getString("LIB_ADHERENT");
    	resultSet.getInt("ID_ENTREPOT");
    	resultSet.getInt("DATE_MOIS");
    	resultSet.getInt("DATE_ANNEE");
    	resultSet.getInt("ID_STATUT");
    	resultSet.getString("LIB_STATUT");
    	resultSet.getDate("DATE_TRAITEMENT");
    	resultSet.getInt("TYPE_FICHIER");
     
    	String query2 = "select count (*) from AGORA_ATF.dbo.ATF_SUIVI_WORK WHERE LIB_ADHERENT = '" + resultSet.getInt("LIB_ADHERENT") +"'";
    	statement2 = (SQLServerStatement) connect.createStatement();
    	resultSet2 = statement2.execute(query2);
    	disp("Compteur: " + resultSet2.);
    }
    Lorsque la deuxième partie du code est exécutée, je cherche à récupérer le nombre de résultats trouvés, mais j'obtiens le message d'erreur suivant:
    An error occurred while converting the varchar value to JDBC data type INTEGER.
    Je ne pense pas que la structure de mon code soit des plus optimales pour ce genre d'opération donc si vous avez des conseils, ils seront bienvenus.

    Du coup je suis bloqué à cette étape. Si j'ai bien compris on a accès à 3 méthodes différentes:
    execute: qui renvoit un booleen si un resultSet a été trouvé.
    executeQuerry: renvoie le resultSet des résultats
    executeUpdate: renvoie un int sur le nombre de lignes modifiées (pour les INSERT ou DELETE)

    Je serai tenté d'utiliser executeUpdate mais je ne fais pas insert, ni delete, j'effectue simplement une recherche en base.

    Lorsque j'éxécute ma querry2 directement dans SQL Manager, elle me renvoie un tableau avec une colonne et une ligne avec un 0 dedans (puisqu'il n'y a pas de valeur trouvée). Or cet colonne est nomée COLUMN1 (colonne que je n'ai pas nommé moi même). Donc je ne comprends pas trop la logique.

    Je vous remercie par avance pour votre aide.

    Thibault

  2. #2
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    OOps petite erreur dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String query2 = "select count (*) from AGORA_ATF.dbo.ATF_SUIVI_WORK WHERE LIB_ADHERENT = '" + resultSet.getString("LIB_ADHERENT") +"'";

  3. #3
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Voilà donc en modifiant ma requête 2 avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String query2 = "select count (*) from AGORA_ATF.dbo.ATF_SUIVI_WORK WHERE LIB_ADHERENT = '" + resultSet.getString("LIB_ADHERENT") +"'";
    					statement2 = (SQLServerStatement) connect.createStatement();
    					resultSet2 = (SQLServerResultSet) statement2.executeQuery(query2);
    					while (resultSet2.next()) {
    						disp("Nombre éléments: " + resultSet2.getString("COLUMN1"));
    }
    J'obtiens le message d'erreur suivant:
    The column name COLUMN1 is not valid.
    Et donc je suis de nouveau coincé...

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS COLUMN1
    ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Ah voilà la solution, merci pour ton aide wax78.
    Sinon sais-tu s'il est possible d'optimiser ma requête pour que tout se passe dans une seule requête plutôt qu'une seule ?

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Je ne suis pas sure d'avoir bien compris le probleme mais tu demande pour faire une requete qui compare 2 liste en supprimant les elements qui existent dans les 2 ?

    Si oui un minus ou un exists ou un truc du genre devrait faire l'affaire plutot que ce que je vois la non ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Très bonne question, je vais me documenter et je te dirai ça plus tard.
    Je ne suis pas un expert JDBC, et j'ai une partie de mon programme qui repose là dessus donc je suis bien obligé de m'y mettre un peu !!

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Quelles sont les structures de tes 2 tables et quelles sont les clés ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Très bonne question: lorsque je regarde ma structure de table dans le SQL Manager, il n'y a pas de clés qui ont été définies.
    Ces tables sont utilisées uniquement pour des problématiques de stockage. En gros, ça me sert de données de configurations pour un programme.
    La structure des deux tables est la suivante:

    [SOURCE] varchar(2) COLLATE SQL_Latin1_General_CP850_BIN2 NULL,
    [ID_ADHERENT] int NULL,
    [LIB_ADHERENT] varchar(50) COLLATE SQL_Latin1_General_CP850_BIN2 NULL,
    [ID_ENTREPOT] int NULL,
    [DATE_MOIS] int NULL,
    [DATE_ANNEE] int NULL,
    [ID_STATUT] int NULL,
    [LIB_STATUT] varchar(50) COLLATE SQL_Latin1_General_CP850_BIN2 NULL,
    [DATE_TRAITEMENT] datetime NULL,
    [TYPE_FICHIER] int NULL

  10. #10
    Membre du Club Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Points : 68
    Points
    68
    Par défaut Comparer deux tables
    Bonjour,

    Pour optimiser et minimiser ton code tu peux utiliser les requêtes imbriqués ça va te permettre de faire qu'une seule requête de deux.

    Bonne chance

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tant qu'à optimiser, autant utiliser SQL comme elles ont la même structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into tableCible
    select * from tableSource where colonneClé not in (select colonneClé from tableCible)
    (ou not exists en fonction du besoin)
    Ensuite, tu n'as plus qu'à vider la table de travail...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Merci pour ton aide OButterlin, problème résolu

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

Discussions similaires

  1. Comparer deux tables
    Par ash_rmy dans le forum SAS Base
    Réponses: 3
    Dernier message: 03/11/2009, 16h09
  2. Tableau pour Comparer deux tables
    Par Frog74 dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/04/2008, 10h09
  3. Comparer deux tables
    Par wachoo31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/10/2007, 19h55
  4. comparer deux tables
    Par khayate dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/07/2007, 17h21
  5. comparer deux tables
    Par moicats dans le forum Access
    Réponses: 4
    Dernier message: 15/05/2006, 16h27

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