web-dev-qa-db-fra.com

Meilleures pratiques pour SQLite DB et ContentProvider

Mon application Android lit et écrit sur une base de données SQLite locale à partir de différentes activités et d'un service. Assez standard. Mais je ne suis pas satisfait de la manière dont j'ai stocké tous les détails de la base de données sous forme de constantes que j'utilise ensuite partout où j'accède à la base de données. On m'a conseillé d'envelopper la base de données dans un ContentProvider. Cela me semble bien. Pendant que je refacturais mon code, je pensais que je demanderais: 

  • Quelles sont vos meilleures pratiques pour le stockage de données de base de données locale dans Android?
  • Où et comment stockez-vous les instructions "CREATE TABLE", les noms de colonne, d'autres instructions SQL?
  • Souhaitez-vous partager une liste des classes que vous instanciez et leur contenu (ContentProvider, DatabaseProvider, DatabaseHelper ...)?
  • Comment coordonner la structure de votre base de données Android locale avec une base de données côté serveur disponible via une interface REST?

Oui, je me rends compte que je suis en train de parler de la pérenne "Où est le cadre de cartographie de relation d'objet Android?" question. Pour l'instant, je suis surtout curieux de savoir comment vous structurez vos applications Android avec ce qui est disponible dans le SDK standard.

Comme toujours, merci pour les pointeurs!

46
Drew Dara-Abrams

Nous réglons ORMLite sur Android depuis un moment maintenant et cela fonctionne bien. ORMLite prend en charge Android avec les appels de base de données natifs et prend également en charge d'autres bases de données via JDBC. Vous annotez vos classes/champs et utilisez des classes DAO de base pour persister dans SQLite.

  • Les instructions CREATE TABLE sont gérées par les classes d’utilitaires de mon ORMLite. La plupart des instructions SQL sont prises en charge par les classes DAO.
  • La section Android de la documentation en ligne explique la hiérarchie des classes. Vous implémentez une DatabaseHelper qui aide à créer une mise à jour de votre base de données. Vos activités étendent OrmLiteBaseActivity (ou service ou onglet) qui donne accès aux assistants et aux DAO.
  • ORMLite ne fournit pas de solution pour la fusion avec les serveurs REST distants.

J'espère que c'est un peu utile.

17
Gray

Pour l'instant, je suis surtout curieux de savoir comment vous structurez vos applications Android avec ce qui est disponible dans le SDK standard.

Je ne suis pas un vrai fan de SQL et de la façon dont il est géré dans Android, j'utilise donc la base de données d'objets NeoDatis . En gros, il vous permet simplement de stocker/récupérer des objets Java dans un fichier plat stocké sur le périphérique très facilement. db40 est également une autre base de données d'objets alternative qui fonctionnera sous Android.

N'ayant eu aucun problème en utilisant cette approche, vous voudrez peut-être noter que l'inclusion de la bibliothèque NeoDatis augmentera la taille de votre APK de ~ 700kb.

1
Duane

Juste pour compléter la liste de plus en plus… Un autre ORM est la solution ORM fournie avec BARACUS Framework . Il n’est pas prévu de créer des bases de données d’entreprise, mais plutôt de stocker quelques entités dans la base de données et de les rendre accessibles à l’application. Il n'y a pas d'approche de génération de code à l'intérieur de celle-ci; vous écrivez simplement votre entité pojo, un rowmapper et votre table def. Par conséquent, vous pouvez utiliser les DAO, l’injection de dépendance, la prise en charge du cycle de vie de style IOC et bien plus encore.

Caractéristiques ORM jusqu'à présent:

Pour les bases de données plus sophistiquées (utiliser ORM est un peu à la main, comme dans le bon vieux Springmapper), je songe actuellement à ajouter l’intégration ormlite.

Pour plus de détails sur le code, consultez l’application du tutoriel sur github

0
gorefest

Vous pouvez également consulter Androrm . C’est un outil open source conçu spécialement pour Android. Cela devrait vous aider avec tout ce qui concerne la base de données. 

0
philgiese

Je ne sais pas si j'ai une réponse, à part que je n'aime pas vraiment la façon dont cela est géré, je la trouve aussi très confuse. Je suis généralement le modèle donné dans l'exemple de bloc-notes fourni avec le SDK. 

Pour cette raison, je travaille sur mon propre mini-framework ORM, en utilisant des annotations et en gérant tout cela. Jusqu'à présent, tout va bien, mais je n'ai pas encore tout réglé.

0
broschb