Aller au contenu

[Questions] Stockage de dates et heures dans SQLite, upgrade DB


Puni

Recommended Posts

Bonjour à tous,

[3615 Mylife]Pour commencer, quelques lignes pour expliquer ma situation : Je suis actuellement étudiant de dernière année dans une école d'informatique Suisse. Pour avoir mon diplôme, je dois fournir un travail de diplôme. Etant donné que j'aime beaucoup Android, j'ai décidé de me lancer dans la réalisation d'une application, destinée aux étudiants, tournant sous Android ! Seulement voilà, j'avais un peu sous-estimé la masse de travail à fournir, et je vais devoir travailler beaucoup plus que prévu. Cela ne serait pas trop grave si, par dessus cela, je reste bloqué beaucoup trop longtemps sur des petits bugs à la con :( C'est pourquoi je me permets de faire appel à vous ! Si quelqu'un pouvait prendre un peu de son temps pour me dépanner, cela serait vraiment, vraiment, vraiment très apprécié de ma part ![/3615 Mylife]

J'ai décidé de poster ce message dans le forum "Autres", car il touche plusieurs catégories de sujet en même temps, et sera très probablement sujet à des edit... si cela déplaît aux modérateurs, n'hésitez pas à le déplacer !

Entrons dans le vif du sujet :

1) Quelle méthode me conseillez vous pour stocker des dates dans ma base de données SQLite ? Sachant qu'elles sont saisies par l'utilisateur via un DatePicker, et doivent pouvoir être utilisées pour définir la date par défaut d'un autre DatePicker. Venant du monde PHP, j'étais parti sur l'utilisation de Timestamp. Mais, après de nombreuses recherches, leur utilisation en java me parait fastidieuse... dois-je tout de même continuer sur cette voie ? Auriez-vous des bons tutoriels expliquant leur utilisation ?

2) Comme la question du dessus, quelle méthode me conseillez vous pour stocker des heures (exemple : 13h15), saisies via un TimePicker ? Là l'utilisation du timestamp ne convient pas du tout...

3) Quelqu'un saurait m'expliquer l'utilisation de la méthode onUpgrade du SQLiteOpenHelper ? Comment provoquer l'appel de la méthode ? Car si je fais un changement dans la structure de ma BDD, par exemple en supprimant une table, la méthode n'est jamais appelée... du coup ma seule solution est de désinstaller puis réinstaller l'application :/

Voilà pour l'instant mes plus gros points noirs... Je posterai à nouveau si d'autres questions me viennent à l'esprit.

Et, comme je le disais, je remercie ENORMEMENT les personnes qui prendront le temps de me répondre !

Lien vers le commentaire
Partager sur d’autres sites

  • 1 month later...

Oulah je déterre un sujet mais bon ... j'ai vu que je pouvais t'aider sur ça ... serait-ce déjà trop tard?

Tu en es où?

Alors, alors .... perso j'aurais mis ton post dans "Accès aux données (ContentProvider, SQLite...)" au moins ... je crois que plus de gens seraient venus t'aider ... enfin je pense ... pas sûr ...

1/ Je ne pourrais pas te conseiller la meilleure méthode mais seulement celle que j'aurais utilisé:

- Convertir ta date en string pour l'enregistrer en bdd puis pour la récupèrer faire l'opération inverse ... je suis pas sûr mais je crois qu'il est bien possible qu'une fonction genre String.format date quelque chose marche ... JAMAIS TESTE

- Convertir ta date en 3 champs distincts de type int : jour / mois / année ... tu les enregistres et récupères ainsi facilement :) JAMAIS TESTE

2/ Les mêmes techniques .... j'ai testé la deuxième pour les heures en séparant en heure / minutes ...

3/ Tu as tout expliqué toi même ... elle ne se fait appeller que dans certains cas. En particulier, lorsque l'application est "upgradée" justement .... par là, il faut comprendre que le numéro de version a été incrémenté. Je précise que ce n'est qu'une supposition de ma part suivant ce que j'ai pu remarquer après quelques mois de dév Android. Donc si tu modifies des tables il faut incrémenter un champs que tu auras auparavant crée :

private static final int DATABASE_VERSION = 1;

----> il passe à 2

Et du coup:

 @Override
       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
       {
           Log.w(TAG, "Mise à jour de la base de données de la version " + oldVersion + " à la version "+ newVersion + ", entraînant une destruction des anciennes données");
           db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE_EXEMPLE);
           onCreate(db);
       }

oldVersion sera automatiquement à 1 et l'autre à 2 ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je te remercie d'avoir pris le temps de répondre :-)

Alors, effectivement il est tout à fait possible de construire un String, puis après le décomposer. C'est d'ailleurs la technique que j'ai utilisée dans mon application. Ensuite est apparu le problème du classement : si je fais un ORDER BY date, l'ordre est complètement naze (15.08 est plus petit que 16.03.... no comment)

Donc pour l'instant j'ai fait la méthode la plus simple : j'ai tout enregistré au format américain (YYYY.MM.DD). Du coup, je peux classer mes résultats par date et cela fonctionne.

J'avais un peu laissé tomber pour l'instant avec la version de la base de données, mais j'avais trouvé un exemple fonctionnel dans le tutoriel officiel pour créer un Notepad.. Et effectivement ton raisonnement parait logique !

Donc même si tu es arrivé un peu après la bataille, je te remercie d'avoir pris le temps de répondre et je suis sûr que ton poste servira à d'autres développeurs dans la détresse !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...