1. enrem, 25.01.2019 #1
    enrem

    enrem Threadstarter Erfahrener Benutzer

    Hallo,

    ich möchte eine lokale SQLite-Datenbank (Tabellen) mit bzw. über die Dropbox synchronisieren. Dabei können mehrere Geräte den selben Account der Dropbox verwenden!

    Diaro macht es genauso wie ich das gerne hätte. Dort kann ich bspw. An 3 Geräten gleichzeitig Daten erfassen und diese werden anschl. korrekt synchronisiert (kann man selbst anstoßen).

    Und zwar legt Diaro (verschlüsselt mit SQLCipher) für jeden Datensatz eine Datei in der Dropbox an. Eine Tabelle mit 100 Datensätzen hätte somit in der Dropbox 100 Dateien.

    Was ich mir auch überlege, wird am Ende durch Abhängigkeiten in den Tabellen (Referentielle Integrität) zu kompliziert, wenn ich das weiterdenke.

    Eine Lösung wäre, nur bei einem Gerät eine Neuanlage zu gestatten und die anderen Geräte dürfen nur ändern. Dann könnte man es wie unten leicht und sicher umsetzen.

    Beispiel (Tag und Sekunden lasse ich in Feld Update zum erklären einfachhalber weg):

    Datenbank Gerät1 „stunden.sqlite“. Tabellenname „Kunde“. Felder _id, Name und update.

    _id Name update
    1 Homer 19:00
    2 Marge 19:01
    3 Bart 19:30


    Datenbank Gerät2 „stunden.sqlite“. Tabellenname „Kunde“. Felder _id und Name.

    _id Name update
    1 Thomas 20:00
    2 Michael 18:00
    3 Heinz 17:00


    Als erstes synchronisiert Gerät 1:

    Ich möchte nun auf der Dropbox in den Ordner App/stundenapp/kunde folgende Dateien anlegen. Dabei steht die erste Zahl für die _id in der Tabelle und die zweite für die Zeit in Feld Update. In der Textdatei schreibe ich den kompletten Datensatz. Somit existiert Pro Datensatz eine Datei in der Dropbox. Der Ordnername „Kunde“ entspricht dem Tabellennamen.

    Zuerst vergleiche ich die Daten von Gerät (Quelle) mit dem Server (Ziel). Da noch keine Dateien in der Dropbox existieren werden diese angelegt (_new.txt).

    00000000001_1900_new.txt (Inhalt Homer..)
    00000000002_1901_new.txt (Inhalt Marge..)
    00000000003_1930_new.txt (Inhalt Bart..)

    Jetzt synchronisiert Gerät 2:

    _id 1 wird überschrieben da der Eintrag 20:00 Uhr Thomas jünger ist als 19:00 Uhr Homer.
    00000000001_2000_update.txt (Inhalt Thomas..)

    _id 2 wird nicht überschrieben da der Eintrag 18:00 Uhr Michael älter ist als 19:01 Marge.
    00000000002_1901_neu.txt (Inhalt Marge..)

    _id 3 wird nicht überschrieben da der Eintrag 17:00 Uhr (Heinz) älter ist al 19:30 Uhr Bart
    00000000003_1930_new.txt (Inhalt Bart..)

    Somit wurde nur 1 Datensatz geändert.

    Bei den gelöschten Datensätzen würde in der Dropbox folgende Datei stehen.
    00000000004_2100_del.txt (Inhalt leer oder lassen zum wiederherstellen)

    Nun zu meinem Problem!

    Ich möchte das andere Geräte Neuanlagen durchführen können. Dann jedoch muss ich die Tabellen mit den unterschiedlichen _id´s zusammenführen. Was bedeutet das ich für jede Tabelle eine zusätzliche ID einführen muss. Also für den Kunden gäbe es dann _id, idKunde, und Name.

    Und nun bin ich am Ende. Ab jetzt sehe ich keine Bäume mehr. Bin total verwirrt. Keine Ahnung wie ich jetzt zwei SQLite-Datenbanken sicher zusammenfummeln kann.

    Hab Ihr einen Lösungsansatz?

    Freue mich über jeden Kommentar.

    Nachtrag:
    Was haltet Ihr davon wenn ich die IMEI Nr. vom Smartphone in die eigene ID´s packe. Beispielsweise wäre die IDKunde = _id+IMEI-Nr.

    Gruß enrem
     
    Zuletzt bearbeitet: 25.01.2019
  2. jogimuc, 25.01.2019 #2
    jogimuc

    jogimuc Erfahrener Benutzer

    Hi also mit einzelnen Dateien für jeden Datensatz bei Dropbox wirst du das wohl nicht schaffen.
    Finde dafür ist der Verwaltungs Aufwand viel zu hoch. Im Prinzip müsstest du dafür selber eine Daten Bank daraus bauen. Da stellt sich mir die Frage wo zu du da noch eine sqlite brauchst.. Für das was du willst sind online Datenbanken gedacht und geeignet. Wie zb Firebase, MySQL auf einem Server oder auch andere online DB.
    Warum willst du das Rad neu erfinden?
     
    Zuletzt bearbeitet: 25.01.2019
  3. enrem, 25.01.2019 #3
    enrem

    enrem Threadstarter Erfahrener Benutzer

    Hallo jogimuc

    Danke für die Antwort. Nein das Rad möchte ich bestimmt nicht neu erfinden. Zu MySQL fehlt mir die Erfahrung, da habe ich gleich noch einige Fragen.

    Zu Firebase:

    Davon bin ich ab zu abhängig. Mir sind die Daten meiner Kunden heilig.

    Ausschnitt eines Artikel:

    Worauf lasst ihr euch mit Firebase ein?

    Bei den vielen Vorteilen und Möglichkeiten von Firebase könnten einige Aspekte schnell vergessen werden. Durch die Nutzung von Firebase kommen ähnliche Nachteile zum Tragen wie bei Cloud-Computing beziehungsweise Serverless Computing. Darunter die hohe Abhängigkeit von einem Anbieter, in diesem Fall Google, und ein hoher Kontrollverlust. So können beispielsweise keine beliebigen Änderungen an der Serverinfrastruktur vorgenommen werden, da alle Produkte auf den Google-Servern gehostet werden.

    Außerdem übermittelt ihr ein Großteil der App-Nutzerdaten an Google. Ein faires Preismodell hat meistens eine derartige andere Seite der Medaille. So bezahlst du die Firebase-Services zum Teil mit den Daten deiner App. Aus diesen Informationen weiß Google durchaus Profit zu schlagen, wie beispielsweise mit gezielterer Werbung. Auch im Zuge der DSGVO sollte nicht ganz außer Acht gelassen werden, dass die Übermittlung von Nutzerdaten an das nichteuropäische Ausland immer genau durchdacht werden sollte.

    Hier die Quelle: Das derzeit wohl mächtigste Tool für Entwickler heißt Firebase

    Zu MySQL:

    Soweit ich das verstehe benötige ich einen Online-Server (Web-Hoster) der mir eine MySQL-Datenbank zur Verfügung stellt (so wie bei Wordpress oder Joomla).

    Das ist keine Option für mich aus folgenden Gründen:

    1) Der Anwender muss sich zunächst einmal anmelden und seine sensiblen Daten in eine Cloud abgeben.

    2) In dieser Datenbank kämen einige Tausend Kunden zusammen. Ich müsste den Hoster vertrauen und die Kunden mir. Zu viel Verantwortung. Und dann noch das mit der DSGVO.

    3) Die App soll auch offline funktionieren. Der Aufwand schein groß zu sein dies mit MySQL zu realisieren.

    Mein Wunsch ist es, dass jeder Kunde seine eigene Datenbank lokal behalten und nur auf Wunsch evtl. mit Mitarbeitern die Daten abgleichen kann. SQLite-DBMS sollte soetwas können. Leider wurde das Projekt eingestampft. SQLiteDBMS

    Nach einiger Überlegungen versuche ich es folgendermaßen:

    Jedes Gerät kann seine Datenbank in die Dropbox mit der 15 Stelligen IMEI und dem Änderungsdatum hochladen:

    Beispiel:

    123456789012345_01.01.2019.13:40.sqlite
    456789012345678_05.01.2019.18:50.sqlite

    usw.

    In der App füge ich die Datenbanken in einer zusammen. Die Tabellen intern bestehen aus eigenen id´s an denen ich die IMEI dranhänge.

    Beispiel:
    _id idKunde
    1 123456789012345 1
    2 123456789012345 2

    Auf diese Weise bekomme ich alle Daten zusammen. Der einzige Konflikt besteht in der Tabelle Kunde, dort sollten keine Duplikate (von anderen Geräten) auftauchen. Das löse ich evtl. über den Verwalter der zunächst einmal alle Kunden erfasst damit die Mitarbeiter Einträge durchführen können.

    Sollte jemand eine andere saubere Lösung kennen würde ich mich freuen.
     
    Zuletzt bearbeitet: 27.01.2019
Die Seite wird geladen...
Ähnliche Themen Forum Datum
UUID als Primärschlüssel in einer referenziellen Datenbank Android App Entwicklung 14.02.2019
Datenbank mit Kundendaten Android App Entwicklung 13.02.2019
Kommunikation mit Advatange Database Server Android App Entwicklung 29.11.2018
Hilfestellung Appentwicklung Android App Entwicklung 29.09.2018
Android Room, wie einsteigen? Android App Entwicklung 31.07.2018
Eintrag in einer Datenbank mithilfe einer ListView löschen Android App Entwicklung 20.06.2018
Android Studio: Auf Datenbank mit zwei Spinner zugreifen. Android App Entwicklung 07.06.2018
SQLite Datenbank mit zwei Tabellen erstellen Android App Entwicklung 30.05.2018
Was am besten für eine Datenbank benutzen? Android App Entwicklung 26.02.2018
Du betrachtest das Thema "SQLite Datenbank über die Dropbox synchronisieren" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.