Ich verwende die Android Room Persistence Library für mein neues Projekt. Ich möchte ein Tabellenfeld aktualisieren. Ich habe versucht wie in meinem Dao
-
// Method 1:
@Dao
public interface TourDao {
@Update
int updateTour(Tour tour);
}
Wenn ich jedoch versuche, mit dieser Methode zu aktualisieren, werden alle Felder der Entität aktualisiert, in denen sie mit dem Primärschlüsselwert des Tourobjekts übereinstimmen. Ich habe benutzt@Query
// Method 2:
@Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid")
int updateTour(long tid, String end_address);
Es funktioniert, aber in meinem Fall wird es viele Abfragen geben, da ich viele Felder in meiner Entität habe. Ich möchte wissen, wie ich ein Feld (nicht alle) wie Method 1
id = 1 aktualisieren kann . (id ist der automatisch generierte Primärschlüssel).
// Entity:
@Entity
public class Tour {
@PrimaryKey(autoGenerate = true)
public long id;
private String startAddress;
private String endAddress;
//constructor, getter and setter
}
android
sql-update
android-room
Rasel
quelle
quelle
Antworten:
Verwenden
@Query
Sie wie in Methode 2.Dann haben kleinere Einheiten. Oder aktualisieren Sie die Felder nicht einzeln, sondern haben Sie grobkörnigere Interaktionen mit der Datenbank.
IOW, es gibt nichts im Raum selbst, was tun könnte, was Sie suchen.
quelle
@Query
.true =1
,false=0
SELECT * FROM note_table WHERE isNoteArchived == 0
Laut SQLite Update Docs :
Beispiel:
Entität:
Dao:
quelle
Ab Raum 2.2.0, der im Oktober 2019 veröffentlicht wurde, können Sie eine Zielentität für Aktualisierungen angeben. Wenn sich der Aktualisierungsparameter unterscheidet, aktualisiert Room nur die Teilentitätsspalten. Ein Beispiel für die OP-Frage zeigt dies etwas deutlicher.
Beachten Sie, dass Sie eine neue Teilentität namens TourUpdate zusammen mit Ihrer tatsächlichen Tour-Entität in der Frage erstellen müssen. Wenn Sie jetzt update mit einem TourUpdate-Objekt aufrufen, wird endAddress aktualisiert und der Wert für startAddress bleibt unverändert. Dies funktioniert perfekt für mich, wenn ich eine insertOrUpdate-Methode in meinem DAO verwende, die die Datenbank mit neuen Remote-Werten aus der API aktualisiert, die lokalen App-Daten jedoch in der Tabelle allein lässt.
quelle
Sie könnten dies versuchen, aber die Leistung kann etwas schlechter sein:
quelle
Ich denke, Sie müssen nicht nur ein bestimmtes Feld aktualisieren. Aktualisieren Sie einfach ganze Daten.
Es ist im Grunde eine gegebene Abfrage. Keine Notwendigkeit, eine neue Abfrage zu machen.
Memo.class
Das einzige, was Sie wissen müssen, ist 'id'. Wenn Sie beispielsweise nur "Titel" aktualisieren möchten, können Sie "Inhalt" und "Foto" aus bereits eingefügten Daten wiederverwenden . Verwenden Sie in echtem Code Folgendes
quelle
Wenn Sie Benutzerinformationen für eine bestimmte Benutzer-ID "x" aktualisieren müssen,
Das ViewModel initialisiert eine Instanz von dbManager, um auf die Datenbank zuzugreifen. Der Code sollte folgendermaßen aussehen:
Aktualisieren Sie dann einfach Ihr Benutzerelement auf diese Weise. Angenommen, Ihre Benutzer-ID lautet 1122 und der Benutzername lautet "xyz", was in "zyx" geändert werden muss.
Ruft ein userItem der ID 1122 User object ab
Dies ist ein Rohcode, hoffe er hilft Ihnen.
Viel Spaß beim Codieren
quelle