probleme mise a jour de ma base de données - Java - Programmation
Marsh Posté le 26-03-2013 à 12:13:48
En gros tu veux effacer ta table et insérer toutes les lignes du fichier?
C'est quoi qui te bloque exactement?
Marsh Posté le 26-03-2013 à 12:30:04
non je ne veux pas effacer ma table.
supposons que ma table contient 10 lignes et que mon fichier a été mis à jour et qu'il contient maintenant 15 lignes. ce que je veux faire c'est comparer les 10 premiere lignes du fichier et de la table, si elle sont identiques ne rien faire, sinon remplacer la ligne de la table par celle de du fichier
pour les cinq dernieres lignes du fichier les insererer dans la table directement
voila un exmemple de ce que je veux faire
fichier table
00000 111111
00000 000000
00000 111111
22222
000000 != 111111 alors remplacer 111111 par 00000
000000 = 000000 alors ne rien faire
000000 != 111111 alors remplacer 111111 par 00000
222222 n'existe pas dans table alors inserer 22222 dans la table
Marsh Posté le 26-03-2013 à 12:45:50
Oui, ça revient a effacer la table et insérer les lignes du fichier. Mais en plus compliqué.
Marsh Posté le 26-03-2013 à 12:48:24
oui par ce que c'est optimisé la mise a jour n'est declenché que s'il y a mise a jour
Marsh Posté le 26-03-2013 à 12:58:04
Je sais pas si faire whatmille requêtes est plus optimisé que faire un batch insert, mais soit.
Voici l'algo en pseudocode:
Code :
|
Tu bloques sur quoi précisément?
Marsh Posté le 26-03-2013 à 13:02:28
Tu es sûr que les nouvelles lignes sont toujours en fin de fichier ?
Que faire, si, dans le fichier, il y a de nouvelles lignes au milieu de celles déjà insérées ???
La solution est de trouver des clés :
- identifiant une ligne du fichier de manière unique
- identifiant un enregistrement en base de manière unique
Tu lis une ligne du fichier
Tu formes la clé (par exemple, nom + adresse ip) pour la ligne
Tu cherches la clé dans les enregistrements en BDD
- si la clé est trouvée, tu remplaces les infos à remplacer (UPDATE)
- si non tu crées un enregistrement (INSERT)
Marsh Posté le 26-03-2013 à 13:05:38
merci pour ta reponse,
en fait ce qui me bloque c'est que je veux mettre a jour ma table a partir d'un fichier et détecter aussi les changement sur cette table c'est à dire:
- lorsqu'il y une nouvelle ligne ajouté, (en indiquant laquelle)
- une ligne supprimé (en indiquant laquelle)
- une ligne qui existait avant mais où quelques un de ses champs ont changé de valeur
Marsh Posté le 26-03-2013 à 13:08:21
bloomingdals a écrit : merci pour ta reponse, |
Ah mais oui mais non. C'est pas le même problème. Il te faut un identifiant unique permettant d'identifier une ligne, dans ton fichier et dans ta table.
C'est expliqué là: http://en.wikipedia.org/wiki/Primary_Key
Marsh Posté le 26-03-2013 à 13:37:21
j'ai trouvé une autre methode, un peu plus simple
je peux a chaque fois avant de mettre a jour ma table en creer une nouvelle a partir de mon fichier. puis calculer la difference entre ces deux tables ce qui me donnera les lignes qui ont changé celle qui ont disparues et celles qui on été ajouté
voici la structure de mes deux tables
test
id int (clé pimaire)
adresse (varchar)
system (int)
meme chose pour ma dexième table test3
comment je peux calsuler la différences en les deux tables???
Marsh Posté le 26-03-2013 à 14:49:27
Mauvaise méthode.
Il est déconseillé d'utiliser des vues ou des tables intermédiaires dans la résolution des problèmes de base de données.
Par ailleurs, il n'y a pas de méthode miracle faisant le diff entre deux tables, tu dois coder cela à la main.
Marsh Posté le 26-03-2013 à 15:31:23
merci,
est ce que tu peux me dire comment je fais si je veux tester si une entrée existe dans ma table et ci c'est vrai la récupérer ou bien donner sa position???
Marsh Posté le 26-03-2013 à 15:37:29
oui mais j'ai du mal quand les requetes deviennt imbriquée.
j'ai essayé avec cette requuete
select * from test where '10.0.0.0' in (select adresse from test);
mais ca me renvoie toute la table or ce que je veux c'est juste l'entrée de la table qui correspond a 10.0.0.0
Marsh Posté le 26-03-2013 à 15:42:42
Il faut que tu te trouve un cours de sql
matche l'adresse exacte :
select * from test where adresse='10.0.0.0'
matche 10.0.0.* :
select * from test where adresse like '10.0.0.%'
Marsh Posté le 26-03-2013 à 16:09:16
merci bcp
c'est pas que j'ai besoin d'un court sql. c juste un manque de concentration , 12 heurs de suite sur un pc a programmer c pas facile du tt.
merci quand meme
Marsh Posté le 26-03-2013 à 12:06:08
voila ca fait deux jour que j'essaie de faire marcher mon code, il est trop compliqué.
au fait je veux mettre a jour une table de ma base de données a partir d'informations qui sont stockées dans un fichier (le fichier est mis a jour grace à une autre classe java). lorsque le nombre de lignes du fichiers reste le meme, tout se passe très bien car il suffit de comparer les lignes du fichiers et celle de la table.
le problème apparait lorsque le nombre de lignes du fichier augmente.
ce que je veux c'est faire c'est comparer la table et le fichier tant que le nombre de lignes et le meme puis pour les nouvelles lignes du fichier, faire une simple insertions dans la table
exemple si ceci est mon fichier 000000 et ceci est ma table 11111
000000 11111
000000
alors comparer les lignes 1 et 2 du fichier et de la table puis ajouter la 3eme ligne à la table , dans ce cas la table aura le contenu suivant
000000
000000
000000
si vous pouvez m'aider ca sera tres gentil
merci bcp