probleme mise a jour de ma base de données

probleme mise a jour de ma base de données - Java - Programmation

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

Reply

Marsh Posté le 26-03-2013 à 12:06:08   

Reply

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?

Reply

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

Reply

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é.

Reply

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
 

Reply

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 :
  1. File fic = new File ("fichiertexte.txt" )
  2. Recordset rs  = new Sql("select * from matable" ).execute();
  3. String lignefichier;
  4. String ligneTable;
  5. while (fin de fichier non atteint)
  6. {
  7.   ligneficheir = nouvelle ligne du fichier;
  8.   lignetable = rs.next(); //nouvelle ligne de la table
  9.   if (lignetable == null) //fin de table
  10.     insérer la nouvelle valeur
  11.   else  if(rs.next() != ligne)
  12.     update la ligne
  13.   else
  14.     //ne rien faire, les lignes sont identiques
  15. }


 
Tu bloques sur quoi précisément?

Reply

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)
 

Reply

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

Reply

Marsh Posté le 26-03-2013 à 13:08:15    

willy c'est exactement ce que je veux faire

Reply

Marsh Posté le 26-03-2013 à 13:08:21    

bloomingdals a écrit :

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


 
 
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

Reply

Marsh Posté le 26-03-2013 à 13:08:21   

Reply

Marsh Posté le 26-03-2013 à 13:11:49    

merci je vais essayer ca

Reply

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???

Reply

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.

Reply

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???

Reply

Marsh Posté le 26-03-2013 à 15:32:14    

Tu as déjà fait du sql ?

Reply

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

Reply

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.%'

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed