2016-05-21 10 views
0

In der Android-Anwendung, ich arbeite an dem Objekt Schuld repräsentiert einen Eintrag in der Tabelle Schulden innerhalb der Datenbank.Herausforderungen mit einem anderen Thread schreiben Daten in Datenbank (Android, Java)

Ich habe eine Warteschlange von Objekten des Typs Debt erstellt und ein Thread namens DatabaseWriter. Wenn ich eine Schuld in diese Warteschlange setze, wird der Thread geweckt und sorgt dafür, dass ein neuer Eintrag in der Datenbank mit den Daten erzeugt wird, die in dem Objekt enthalten sind.

Mein Problem ist folgendes:

  1. Die Debt Objekt in die Datenbank geschrieben werden, bevor ich ihren Primärschlüssel (vom Typ Integer) wissen kann, was

    AUTOINCREMENT gesetzt
  2. Zur gleichen Zeit verwende ich die Primärschlüssel der Datenbank, um die Schulden Objekte in der Anwendung zu identifizieren. Ich habe beispielsweise HashMaps, bei denen der Schlüssel der Primärschlüssel in der Datenbank ist und der Wert das Objekt Debt ist.

Die Schlussfolgerung ist, dass ich nicht auf die Datenbank gleichzeitig aktualisieren, weil ich nicht neu Objekte Schulden erstellt verwenden kann, bis ich ihre Primärschlüssel in der Datenbank kennen. Mit diesem Modell ist die einzige Möglichkeit, die mir bleibt, alles sequenziell zu erledigen.

Gibt es eine Möglichkeit, dieses Problem zu umgehen? Welche Designmuster gibt es, um es zu lösen? Ich bin neu mit Datenbanken.

Antwort

0

Ich habe keine Erfahrung in Android zu entwickeln, aber wenn Mybatis und Mysql verwenden, können Sie SELECT LAST_INSERT_ID() erhalten den Primärschlüssel sofort nach dem Einfügen des Objekts. In diesem Fall, wenn Sie nicht das DB-Design ändern können, können Sie eine Klasse schreiben IDGenerator genannt und es wird zwei Dinge tun:

  1. die max-ID in der Tabelle erhalten, wenn Startprogramm und in AtomicLong Wert speichert nowId genannt
  2. bieten ein Verfahren wie getId(), ist diese Methode nur zurück nowId.incrementAndGet()