Création d'une table circulaire [SQLite] - SQL/NoSQL - Programmation
Marsh Posté le 23-12-2005 à 02:05:35
Tu utilise un champ date dans ta table.
Il faut remplir la table de ce nombre d'enregistrement à vide et à la date de création préalablement et on ne fait que des update dessus à la position voulue.
Pour trouver où écrire; prendre le rowid de la 1er date la plus ancienne comme position dans la table.
Marsh Posté le 23-12-2005 à 10:53:18
ça doit fonctionner en effet, sinon des mecs de la mailing list SQLite m'ont donné des éléments aussi :
The following SQL should do what you want. It is also quite efficient
because it always uses the implicit index associated with the integer
primary key field, and usually only touches the first or last record.
Code :
|
The following slightly more complicated version allows the size of the
fifo to be changed on the fly.
Code :
|
The following is a sample run of the second version using fifo sizes of
5 and 8 for demonstration.
Code :
|
1|one
2|two
3|three
Code :
|
2|two
3|three
4|four
5|five
6|six
Code :
|
5|five
6|six
7|seven
8|eight
9|nine
Code :
|
5|five
6|six
7|seven
8|eight
9|nine
10|ten
11|eleven
12|twelve
Code :
|
8|eight
9|nine
10|ten
11|eleven
12|twelve
13|thirteen
14|fourteen
15|fifteen
For either case, the fifo table can eventually exhaust the available id
values (after a very long time because of the 64 bit id values). If this
happens you will receive an SQLITE_FULL error when you try to do an
insert (because of the autoincrement constraint on the id). When this
happens you will need to run the following update to reset the lowest id
to 1 before repeating the failed insert.
Code :
|
HTH
Dennis Cote
Je pense donc prendre de chaque solution, je mettrai la solution utilisée une fois les tests terminés,
merci pour le coup de main, à plus
Julien
Marsh Posté le 22-12-2005 à 16:19:27
Bonjour,
J'utilise SQLite dans un système embarqué, et je souhaite créer une table qui corresponde à un buffer circulaire. C'est à dire, arrivé à un certain nombre d'enregistrements, je retourne au début en écrasant les données les plus anciennes.
QQun a une idée?
Merci
Julien
Message édité par ruliano le 22-12-2005 à 16:38:14