SQLite Zwei Datenbanken synchronisieren

Morinho

Aktives Mitglied
Hallo zusammen,

ich programmiere derzeit eine Java-Applikation die Informationen einer Datenbank abruft, verändert und löscht. Hierzu verwende ich eine SQLite Datenbank bzw. zwei, denn es ist so, dass der Benutzer bei bestehenden Netzwerkzugriff die online-Datenbank auf dem Netzwerklaufwerk verwendet. Falls der Benutzer bzw. Anwender keinen Netzwerkzugriff hat verwendet er die lokale Datenbank die in der .jar-Datei hängt. Die Datenbanken sind komplett gleich aufgebaut.

Nun möchte ich es so haben das wenn der Benutzer wieder online arbeiten kann, dass die Daten der lokalen Datenbank und der online-Datenbank abgeglichen und synchronisiert werden.

Meine Fragen:
1. Wie stellt man bei SQLite eine Connection zwischen zwei Datenbanken her die Synthax aus anderen Forum aus dem Internet waren sehr unübersichtlich bzw. unverständlich.

Ich wollte hierzu erst einmal eine Abfrage erstellen um zu versuchen die richtigen Daten die anders sind zwischen den Datenbanken herauszufinden.

Mein Ansatz:

SELCECT * FROM lokalDB.Tabelle1 WHERE lokalDB.Tabelle1.Projekt NOT IN (SELECT onlineDB.Tabelle1.Projekt FROM onlineDB.Tabelle1)
 
Nun möchte ich es so haben das wenn der Benutzer wieder online arbeiten kann, dass die Daten der lokalen Datenbank und der online-Datenbank abgeglichen und synchronisiert werden.
Dieser Punkt kann ja schon ziemlich komplex werden. Benutzen z.B. mehrere Benutzer parallel die "Online" Datenbank ? Wenn es nur einer ist und nur der Ort der SQLite-Datei ist einmal lokal und einmal auf einem Netzlaufwerk dann wird es ja deutlich einfacher.
In diesem fall hast du ja sicher in deinem Programm eine Stelle wo erkannt wird dass die Onlinedatenbank wieder verfügbar ist. Die brutale Möglichkeit wäre jetzt die ganze Datenbankdatei auf das Netzlaufwerk zu kopieren.
Wenn du es etwas feiner machen willst könntest du ja alle ändernden SQL-Statements die lokal ausgeführt werden mitprotokollieren und sie dann beim zurückschalten auf das Netzlaufwerk dort ausführen.

Edit: ich kenne SQLite nicht so genau aber können da überhaupt zwei Benutzer parallel die DB benutzen ?
 
Dieser Punkt kann ja schon ziemlich komplex werden. Benutzen z.B. mehrere Benutzer parallel die "Online" Datenbank ?

In dem Fall ist es sogar unmöglich eine 100% Lösung zu finden. Man kann nur mit einem sehr aufwendigen Algorytmus eine Annäherung schaffen.

Wenn du es etwas feiner machen willst könntest du ja alle ändernden SQL-Statements die lokal ausgeführt werden mitprotokollieren und sie dann beim zurückschalten auf das Netzlaufwerk dort ausführen.

Mitprotokolieren braucht er da nichts. Es sollte halt nur jede Tabelle eine Spalte "LastUpdate" haben und dann muss er nur vergleichen welche zuletzt geändert wurde

Edit: ich kenne SQLite nicht so genau aber können da überhaupt zwei Benutzer parallel die DB benutzen ?

Es gibt da ein paar Compiles die das ermöglichen sollen aber ich bin recht skeptisch ob das wirklich bei täglichem harten Einsatz auch funktioniert.

Gruß

Claus
 
Ich bedanke mich sehr für all eure Tipps und Unterstützungen.

Ich habe nun eine ideale Lösung für mein Problem gefunden.

Danke nochmals an alle 🙂
 

Zurück
Oben