Datenbankeinträge vergleichen

Casio

Mitglied
Also folgendes Problem:

Ich hab eine DB in der ich eine KundenId und eine KartenId speichere, dabei kann jeder Kunde nur eine KundenId besitzen, er kann aber mehrere KartenId's registrieren für sich. Ich würde nun gern eine Klasse schreiben, die nur dazu gedacht ist anhand der KartenId mir die KundenId zurückzugeben. Das beste wäre in dem Fall natürlich ich würde das irgendwie Objekt gebunden regeln können also irgendwie evtl mit dem entityManager und der find()-Methode ? Aber natürlich würd ich auch jegliche andere vorschläge annehmen über SQL-queries.


Leider ist mein Wissen nicht besonders groß im Bereich der Datenbanken
 

KaffeeFan

Bekanntes Mitglied
Stehen KundenId und KartenId in einer Tabelle, oder in zwei?
Wenn in zwei; in welcher Relation stehen sie zueinander?

Objektgebunden könntest du es mit "Entity Classes from Database" realisieren.

Gruß
Luk
 

Casio

Mitglied
beides ist in einer Tabelle, also die einzigen Ansätze die ich da hab sind halt leider über Queries ich weiß nicht evtl. gehts auch nicht anders aber selbst mit JPQL-queries tu ich mir schwer ich hab folgenden Ansatz bisher:

Java:
  public List<CustomerMapping> findCustomerId(String cardId) {
        return em.createQuery(
             "SELECT c FROM Customer c WHERE c.cardId LIKE :cardId")
             .setParameter("cardId", cardId)
             .getResultList();
         }

das hier wird aber auf keinen Fall funktionieren oder? Wichtig ist mir vor allem, das es so dynamisch wie möglich codiert ist, weil ich später über die UI genau diese eingabe von der cardId als httpRequest reinbekomme es darf also nicht hardcordiert sein a la "such mal nach der kartennummer 23123" sondern eher "such mal nach *referenzvariabel*"

Mein Wissen in Datenbanken geht quasi gegen 0, ich hab mich da etwas eingelesen und Tutorials gesehen dazu dennoch tu ich mir sehr schwer damit. Vor allem sind die Tutorials natürlich alle auf einem sehr niedrigen Niveau und was ich hier verlange ist glaub ich wesentlich komplexer.
 
Zuletzt bearbeitet von einem Moderator:

KaffeeFan

Bekanntes Mitglied
Setze deinen Code bitte in Zukunt in die dafür vorgesehenen Codetags.

public List<CustomerMapping> findCustomerId(String cardId) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.cardId LIKE :cardId")
.setParameter("cardId", cardId)
.getResultList();
}

Doch, das sollte so funktionieren. Oder tut es das bei dir nicht?

Gruß
Luk
 

Casio

Mitglied
Dann hab ich wohl was falsch verstanden, was spuckt mir diese createQuery aus? Sagt die mir jetzt nun die customerId zu der folgende cardId ? Das wäre ja perfekt
 

Joose

Top Contributor
Du bekommst alle Kunden zurück welche diese Kartennummer haben. Sprich wenn eine Karte nur einem Kunden gehören kann, dann bekommst du nur diesen zurück. (aber alle Informationen der Kundentabelle nicht nur die ID)
 

Casio

Mitglied
Joose danke dass du mithilfst, die KundenId und die KartenId sind beide in der gleichen Tabelle weil das eben bei dir etwas komisch klang.

mit alle Informationen meinst du quasi alle aus der Reihe sprich ich hab vier Spalten Name,KundenId,KartenId,Bank und diese Methode spuckt mir anhand der KartenId eben Name,KundenID und Bank aus oder?

dem könnte ich mit folgendem Code entgegenwirken:

public CustomerMappin findCustomerId(String cardId) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.cardId LIKE :cardId")
.setParameter("cardId", cardId)
.getSingleResult();
}
 

KaffeeFan

Bekanntes Mitglied
"select c" heißt soviel wie, "select *" , sprich hole alles aus der Spalte.
Würdest du "select c.cardId" schreiben, würdest du nur die cardId zurückbekommen.

Gruß
Lukk
 

Casio

Mitglied
okay jetzt ist der Groschen gefallen das bedeutet wenn ich die CustomerID haben will wo die cardId die gleiche ist wie meine referenzvariabel cardId (ich will das ganze so dynamisch wie möglich programmieren da cardId aus einem httpRequest kommt) dann muss das ganze so aussehen:

public CustomerMappin findCustomerId(String cardId) {
return em.createQuery(
"SELECT c.customerId FROM Customer c WHERE c.cardId LIKE :cardId")
.setParameter("cardId", cardId)
.getSingleResult();
}
 

stg

Top Contributor
Und wenn kein Eintrag gefunden wird, erwartest du dann eine Exception?
getSingleResult sollte man wirklich nur verwenden, wenn wirklich sichergestellt ist, dass exakt ein Ergebnis zurückgeliefert wird, wie z.B. bei manchen count-Abfragen.
Aber das steht ja auch alles in dem Artikel, muss ich also nicht weiter ausführen :)
 

max40

Bekanntes Mitglied
schon gelesen, hier erwarte ich aber nur einen Eintrag, da wäre es doch idiotisch eine ganze Liste zurück zu bekommen
Dann hast du es nicht richtig gelesen, es geht darum, das man getSingleResult() nur benutzen soll wenn man definitiv 1 Eintrag zurückbekommt. Denn wenn dein Query kein Daten findet, weil z.B. die übergebene cardId nicht vorhanden ist, erhälst du eine unchecked exception. Und das möchte man nicht.
 

Casio

Mitglied
das heißt ich änder das alles wieder auf eine ResultList um auch den Rückgabewert dementsprechend auf List<CustomerMapping>
der gibt mir dann die customerId zurück ich hab nur noch nicht ganz die Logik bei so einem Query mit dem EntityManager verstanden
gibt mir diese em.createQuery() Methode dann genau das was dort steht zurück und wenn ich das ganze was ich da zurück bekomm gern speichern würde in die Referenzvariabel customerId123 kann ich dann das einfach so :

public List<CustomerMappin> findCustomerId(String cardId) {
return customerId123 = em.createQuery(
"SELECT c.customerId FROM Customer c WHERE c.cardId LIKE :cardId")
.setParameter("cardId", cardId)
.getResultList();
}
 

stg

Top Contributor
Nein. createQuery gibt ein Objekt zurück, welches das Query Interface implementiert und getResultList liefert wie der Name schon vermuten lässt eine Liste.
Außerdem findest du in dem von mir geposteten Artikel auch entsprechende Code-Schnipsel. Hast du dir den Artikel überhaupt durchgelesen?
Vielleicht festigst du besser erstmal deine Grundlagen-Kenntnise bevor du dich an fortgeschrittenere Thenen wie JPA wagst. Da bestehen offenbar noch einige Lücken.
 

Casio

Mitglied
Ja habe ich Chef!
Ich versteh nur nicht so ganz wie ich im Debugger überprüfen soll was in dieser Liste drin ist(wird zwar eh nur ein Wert sein aber gut)

also ich such damit doch die customerID zu der entsprechenden cardID wieso kann ich im debugging-Modus dann nicht genau diese Liste sehen wenn über getResultList oder halt getSingleResult gehe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Datenbankeinträge persistieren Datenbankprogrammierung 8
J parallele Zugriffe auf die gleichen Datenbankeinträge Datenbankprogrammierung 37
E Datenbankeinträge überschreiben Datenbankprogrammierung 2
G Probleme mit Datenbankeinträge Datenbankprogrammierung 4
C zwei Strings vergleichen Datenbankprogrammierung 13
L CSV Datei mit DB Inhalt vergleichen Datenbankprogrammierung 20
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
S MySQL Datenbankabfrage mit Eingabe aus Textfeld vergleichen Datenbankprogrammierung 4
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
V SQLite 2 Tabelle vergleichen und alle unterschiede rausgeben Datenbankprogrammierung 1
V SQLite 2 Tabellen vergleichen und nur Unterschiedliche Sätze rausgeben. Datenbankprogrammierung 31
Paul15 Tabelle vergleichen Datenbankprogrammierung 15
ruutaiokwu sql server 2008 stored procedures automatisiert vergleichen Datenbankprogrammierung 2
P Listen Vergleichen JPA Criteria Datenbankprogrammierung 2
K Zwei Datenbanken miteinander auf Unterschiede vergleichen Datenbankprogrammierung 2
T 2 Tabellen aus 2 Datenbanken miteinander vergleichen Datenbankprogrammierung 6
H Oracle Datumsformat vergleichen Datenbankprogrammierung 13
I DB-Zelleninhalt mit String vergleichen klappt nicht Datenbankprogrammierung 3
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
N Zwei Spalten und Ihre Werte vergleichen Datenbankprogrammierung 3
M Strings vergleichen Datenbankprogrammierung 8
E Vergleichen von datetime mit GregorianCalender-Werte Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben