2017-12-19 4 views
1

Ich benutze Room DB in meiner App und ich möchte, in einer Abfrage, den Spaltennamen als eine Variable, so dass ich es "unterwegs" manipulieren kann (beim Aufruf der Methode) .Raum: mit Variable in Abfrage

Beispielcode („name“ annehmen, eine Variable dar, eine Spalte zu sein):

@Query("UPDATE Products SET :name = :value WHERE prod_id = :prod_id") 
 
    int updateName(String name,String value, String prod_id);

ich versuchte, aber es nicht kompiliert, mit einem Fehler, dass es zu bekommen braucht eine Spalte und keine Zeichenfolge.

Gibt es eine Möglichkeit, dass sogar eine Spalte als Variable platziert wird?

+1

AFAIK, das ist nicht möglich, da AFAIK SQLite Platzhalter für Spaltennamen nicht unterstützt. – CommonsWare

Antwort

1

Dies ist nicht möglich in Zimmer oder sogar in SQLite vorbereitete Aussagen im Allgemeinen, wie CommonsWare in seinem Kommentar zum ursprünglichen Beitrag sagt.

Obwohl ich keine Zitat für die SQLite vorbereitete Anweisung Feature haben, wenn Sie die Query Annotation Dokumentation für Raum here betrachten, werden Sie feststellen, dass "[die] Abfrage zur Kompilierzeit überprüft wird .. um sicherzustellen, dass es sich gut gegen die Datenbank anpasst. Dies sollte bei dynamischen Spaltennamen nicht möglich sein. Sie werden auch bemerken, dass Abfragen mit einiger Tiefe erklärt werden, dass Dinge wie variable Tabellen- und Spaltennamen jedoch auffallend fehlen.