Best Practices für SQLite DB und ContentProvider

Lesezeit: 4 Minuten

Benutzer-Avatar
Zeichnete Dara-Abrams

Meine Android-App liest und schreibt aus einigen verschiedenen Aktivitäten und einem Dienst in eine lokale SQLite-Datenbank. Ziemlich normal. Aber ich bin nicht zufrieden damit, wie ich alle DB-Details als Konstanten gespeichert habe, die ich dann überall verwende, wo ich auf die DB zugreife. Mir wurde geraten, die DB in einen ContentProvider zu packen. Klingt gut für mich. Während ich meinen Code überarbeite, dachte ich, ich würde fragen:

  • Was sind Ihre Best Practices für die lokale DB-Datenspeicherung in Android?
  • Wo und wie speichern Sie “CREATE TABLE”-Anweisungen, Spaltennamen, anderes SQL?
  • Würde es Ihnen etwas ausmachen, eine Liste der Klassen zu teilen, die Sie instanziieren, und was in jeder Klasse enthalten ist (ContentProvider, DatabaseProvider, DatabaseHelper…)?
  • Wie koordinieren Sie die Struktur Ihrer lokalen Android-Datenbank mit einer serverseitigen Datenbank, die über eine REST-Schnittstelle verfügbar ist?

Ja, mir ist klar, dass ich auf das ewige “Wo ist das Android Object-Relation-Mapping-Framework?” Frage. Im Moment bin ich hauptsächlich neugierig zu hören, wie Sie Ihre Android-Apps mit dem strukturieren, was im Standard-SDK verfügbar ist.

Wie immer danke für die Hinweise!

  • Mit einem Augenzwinkern hier ist das eine relevante Video von der Android Dev-Site: youtube.com/watch?v=i293O69nuRo

    – Zeichnete Dara-Abrams

    13. November 2009 um 8:19 Uhr

  • Genau die Frage, die ich stellen wollte! Vielen Dank!

    – Sander Versluys

    14. Oktober 2010 um 11:43 Uhr

Benutzer-Avatar
Grau

Wir haben gestimmt ORMLite auf Android seit einiger Zeit und es funktioniert gut. ORMLite unterstützt Android mit nativen Datenbankaufrufen und unterstützt auch andere Datenbanken über JDBC. Sie kommentieren Ihre Klassen/Felder und verwenden Basis-DAO-Klassen, um in SQLite zu bestehen.

  • CREATE TABLE-Anweisungen werden von den Hilfsklassen meines ORMLite behandelt. Das meiste SQL wird von den DAO-Klassen erledigt.
  • Der Android-Bereich der Online-Dokumentation erklärt die Klassenhierarchie. Sie implementieren a DatabaseHelper Dies hilft beim Erstellen und Aktualisieren Ihrer Datenbank. Ihre Aktivitäten erweitern sich OrmLiteBaseActivity (oder Dienst oder Registerkarte), die den Zugriff auf Helfer und DAOs ermöglicht.
  • ORMLite bietet keine Lösung für das Zusammenführen mit Remote-REST-Servern.

Hoffe, das ist etwas hilfreich.

Im Moment bin ich hauptsächlich neugierig zu hören, wie Sie Ihre Android-Apps mit dem strukturieren, was im Standard-SDK verfügbar ist.

Ich bin kein wirklicher Fan von SQL und der Art und Weise, wie es in Android gehandhabt wird, also verwende ich die Objektdatenbank NeoDatis. Im Grunde können Sie Java-Objekte ganz einfach in einer flachen Datei speichern / abrufen, die auf dem Gerät gespeichert ist. db40 ist auch eine weitere alternative Objektdatenbank, die auf Android funktioniert.

Bei diesem Ansatz hatten Sie keine Probleme. Beachten Sie jedoch, dass das Einbeziehen der NeoDatis-Bibliothek Ihre APK-Größe um ~ 700 KB erhöht.

Ich weiß nicht, ob ich eine Antwort darauf habe, außer dass ich nicht wirklich mag, wie das gehandhabt wird, ich finde es auch sehr chaotisch. Normalerweise folge ich dem Muster, das im Notepad-Beispiel angegeben ist, das mit dem SDK geliefert wird.

Aus diesem Grund arbeite ich an meinem eigenen Mini-ORM-Framework, verwende Annotationen und verwalte all dies. Bis jetzt funktioniert alles gut, aber ich habe noch nicht alles ausgearbeitet.

  • Ja, ich sollte eigentlich das gesamte Notepad-Tutorial durchgehen. Danke für die Erinnerung!

    – Zeichnete Dara-Abrams

    13. November 2009 um 7:44 Uhr

Nur um die Liste immer weiter zu vervollständigen … Ein weiteres ORM ist die mitgelieferte ORM-Lösung BARACUS-Framework. Es ist nicht dazu gedacht, Datenbanken in Unternehmensgröße zu erstellen, sondern eher dazu, ein paar Entitäten in der Datenbank zu speichern und für die App zugänglich zu machen. Es gibt darin keinen Ansatz zur Codegenerierung; Sie schreiben einfach Ihr Entitäts-Pojo, einen Rowmapper und Ihre Tabellendefinition. Daher können Sie DAOs, Dependency Injection, Lebenszyklusunterstützung im IOC-Stil und vieles mehr nutzen.

Bisherige ORM-Funktionen:

Für die anspruchsvolleren Datenbanksachen (die Verwendung des ORM ist ein bisschen Handarbeit wie in der guten alten Frühlings-Rowmapper-Zeit) denke ich derzeit darüber nach, eine Ormlite-Integration hinzuzufügen.

Weitere Codedetails finden Sie in der Tutorial-Anwendung auf github

  • Schrecklicher Doco für diesen hier. Versuchen Sie nicht einmal, einen Fehler oder eine Feature-Anfrage einzureichen …

    – Stefan

    8. November 2011 um 13:15 Uhr

  • Was ist so schrecklich an www.androrm.com/documentation ? Und haben Sie jemals versucht, Feedback zu senden?

    – Philgie

    11. November 2011 um 19:16 Uhr


  • Ja, ich habe es versucht. Ich musste mich bei einer dummen Community-Sache anmelden, die dann nicht einmal die Möglichkeit hatte, jemanden zu kontaktieren oder einen Forumsbeitrag zu hinterlassen. Endete als riesige Zeitverschwendung.

    – Stefan

    14. November 2011 um 23:24 Uhr


  • Danke für die Rückmeldung. Ich habe sowohl der Dokumentation als auch der Beitragsseite eine Kontakt-E-Mail und auch eine kurze Beschreibung des Phabricators hinzugefügt.

    – Philgie

    15. November 2011 um 22:08 Uhr

1031510cookie-checkBest Practices für SQLite DB und ContentProvider

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy