2013-01-12 7 views
5

Ich habe Tabellen A, B, C, D, E und ich mache innere Verbindung über sie.
Ich brauche nur teilweise Daten aus den Ergebnissen. Zum Beispiel brauche ich A.name Spalte, D.phoneNumber Spalte.ORMLite - Wie man das Ergebnis von Join behandelt

Ich verwende die Methode join().

Wie soll ich mit dem Ergebnis umgehen? Soll ich alle meine Kurse durchlaufen, um alle Daten zu bekommen, die ich brauche? Wenn ja, was ist ein einfacher Weg dies zu tun, weil das alles kompliziert zu sein scheint.

Soll ich eine Klasse nur für Ergebnis erstellen und das Ergebnis irgendwie zuordnen?

Antwort

8

Gemäß der ORMlite-Dokumentation können Sie die Join-Anweisung nur mit den Tabellen verwenden, die über das Fremdobjektfeld verbunden sind.

Also die erste Annäherung, wie ich es sehe, ist, Fremdkörper zu benutzen und alle Werte anzufeuern, die Sie brauchen. Wenn Sie zum Beispiel abfragen Sie Tabellen A und B mit

QueryBuilder<A, Integer> aqb = aDao.queryBuilder(); 
QueryBuilder<B, Integer> bqb = bDao.queryBuilder(); 
List<A> results = aqb.join(bqb).query(); 

for (A a : results){ 
    String name = a.getName(); 
    String phone = a.getB().getPhone(); 
} 

während A und B-Klassen etwas wie folgt aussieht:

.... 
public class A{ 
.... 
    @DatabaseField 
    private String name; 

    @DatabaseField(foreign = true, foreignAutoRefresh = true) 
    private B b; 
....   
    public B getB(){ 
     return b; 
    } 
.... 
    public String getName(){ 
     return name; 
    } 
} 

.... 
public class B{ 
.... 
    @DatabaseField 
    private String phone; 

    public String getPhone(){ 
     return phone; 
    } 
} 

Ich bin nicht sicher über genau wird dieser Code arbeiten, ich wollte nur um die Idee zu beschreiben.

Wie ich weiß, können Sie nicht für mehrere Tabellen auf einmal abfragen.

Siehe related ORMLite documentation. Join-Anweisungen wurden seit Version 4.42 der Bibliothek unterstützt.

+0

Also was Sie sagen, ist grundlegend, dass ich nur durch alle Klassen A, B, C, D, E gehen sollte und ich sollte Werte von was auch immer clasess ich brauche abrufen? Wenn ja, würde ich sagen, es wäre besser, benutzerdefinierte SQL zu erstellen und nicht ORM zu verwenden. – Peter

+1

Allgemein - ja. Der ORMLite ist eine leichtgewichtige Bibliothek, die die meisten gängigen SQL-Operationen vereinfacht. Für Dinge, die Sie tun, ist viel einfacher zu SQL-Anfrage verwenden, Cursor abrufen und durchlaufen. – rus1f1kat0R

+0

Fair genug thx für Hilfe – Peter