"Abfrageschleife" auf Datenbank anweden

Casio

Mitglied
Ich hab eine Datenbank mit folgenden Spalten ich versuchs mal so allgemein wie möglich zu stellen damit evtl. andere auch was davon haben:

Revier,Täter,Ort,Delikt alles mit Strings als Datentyp

ich hab folgende 3 Reviere in der Datenbank: 1010, 2020, 3030

dabei unterscheiden sie sich darin, das Revier 1010 nur den Fall übernimmt falls es sich beim Täter um Hansi123 handelt, die Tat in DE(Deutschland) begangen wurde und es sich um Mord handelt Sprich in der DB stehen jeweils in den Spalten folgendes:
Täter:Hansi123
Ort: DE
Delikt:Mord
Revier:1010

dann haben wir ein zweites Revier was den Fall immer übernimmt solang es um Hansi123 geht und es ein Mord war, sprich dem Revier ist es egal wo die Tat begannen wurde also müsste das irgendwie so vermerkt werden in der DB oder kp wie ich das implementier:

Täter:Hansi123
Ort: *
Delikt:Mord
Revier:2020

* = "egal" also alle Länder der Welt

und nun das dritte Revier, das ist noch etwas Toleranter, denen ist nur wichtig das Hansi123 daran beteiligt war sprich so:

Täter:Hansi123
Ort: *
Delikt:*
Revier:3030


So ich will nun eine Abfrage machen zur DB in der ich in der Reihenfolge abfrage:

1. wird geschaut ob alles passt, wenn ja => Revier 1010 kümmert sch darum (wird im return ausgespuckt)
2. wird geschaut ob wenigstens Hansi123 und ob das Delikt ein Mord war, wenn ja Revier 2020
3. wird geschaut ob wenigstens Hansi123 daran beteiligt war, wenn ja Revier 3030
4. wenn nichts davon zutrifft irgend einen Error als return ausspucken...


mein Ansatz:

Java:
    public String responsibleRevier(String taeter, String ort, String delikt) {
        Query q = em.createQuery("SELECT a.Revier FROM Polizeistation a WHERE a.taeter = :taeter AND a.ort = :ort AND a.delikt = :delikt );
        q.setParameter("taeter", taeter);
        q.setParameter("ort", ort);
        q.setParameter("delikt", delikt);

String revier = (String) q.getSingleResult();
return revier;


das hier klappt schön und gut, aber ja wie gesagt das ist nur einer der oben 4 genannten Schritte, ich häng genau hier fest, weil mir ne Idee fehlt wie ich das andere Implementieren soll, ich vermute mal ich muss das irgendwie mit einer If-Schleife machen, dort sagen falls q.getSingleResult() == null ist dann die zweite Abfrage, aber ich weiß nicht wie ich da quasi Implementieren muss in meine DB das es völlig egal ist für das eine Revier was für eine Tat da stattgefunden hat, oder mach ich es dann einfach so das ich in meinem Query nur zwei WHERE clauses hab wo ich eben dann nur zwei vergleiche aufstell und bei der dritten Abfrage eben nur ein WHERE hab und da nur taeter vergleich?

==> Problem ist doch wenn ich so darüber nachdenke wenn ich dann nur nach dem Täter und dem Delikt frage wird mir das doch am Ende wieder ne Liste auspucken weil dann beispielsweise bei der Zweiten Abfrage Revier 1010 als auch Revier 2020 auf die WHERE clauses passen oder? Hab ich grad einen Denkfehler?


liebe Grüße, Casio
 

stg

Top Contributor
Ich vermute du packst dein Problem falsch an.
Die Datenbank ist (primär) nur für die Datenhaltung zuständig, nicht für die Interpretation der Daten.
Die Zuweisung vom richtigen Revier zu einem Fall ist ein logisches Problem, welches bereits vor dem Schreiben in die Datenbank gelöst werden sollte.
Gegebenenfalls kann man so etwas auch beim Schreiben lösen, aber dann hat man eher eine Datenbankspezifische Lösung mittels Triggern, PL/SQL o.Ä.
Ich will nicht partout sagen, dass so etwas mit SQL nicht möglich ist, aber für mich versuchst du wie gesagt das Problem zum falschen Zeitpunkt und an der falschen Stelle zu lösen.

Wie auch immer, dass was einem IF in SQL am ähnlichsten ist, ist das CASE statement ... aber den Weg würde ich an deiner Stelle gar nicht erst einschlagen.
 

Thallius

Top Contributor
Mir ist nicht ganz klar was genau du Abfragen willst. Willst du wissen welche Fälle Für Revier 3030 überbleiben weil sie durch 2020 und 1010 nicht abgedeckt sind? Aber dann muss es ja bestimmte Parameter geben nach denen du abfragst. Wenn du nur nach Hansi abfragst, kannst du ja gar nicht wissen ob der Ort und oder das Delikt nicht auf ein weiteres Revier zutreffe?

Oder gibt es die Konstellation, dass es für ein Delikt keinen Bezirk gibt, oder für eine Ort? Für mich ist das ganze einfach noch zu unklar als das man da helfen könnte. Ich denke auch wie stg, dass du im ganzen Konzept einen Fehler hast, aber da wir das Konzept nicht verstehen ist es schweirig.

Gruß

Claus
 

Casio

Mitglied
Diese Unklarheiten kann ich gerne ausräumen, ich will eine Stufenweise "Einteilung" der Reviere vornehmen, sprich auf gut Deutsch, falls die erste Abfrage passt, also wenn Ort,Delikt und Täter passen, dann soll NUR Revier 1010 den Fall bekommen, wenn nicht soll geprüft werden ob Revier 2020 den Fall übernimmt, dies ist nur dann der Fall wenn es wenigstens beim Täter und beim Delikt um die Parameter da oben geht, falls dies auch nicht zutrifft soll geprüft werden ob Revier 3030 den Fall übernimmt und das tut es eben nur wenn Hansi123 der Täter war, sprich der Ort kann von mir aus Brasilien sein und das Delikt irgendwie Banküberfall oder sowas..... und wenn das ebenfalls nicht zutrifft weil der Täter eben Lisa321 heißt, würd ich quasi einen Error zurückgeben also nicht mehr die letzte Spalte ausspucken in der immer meine Reviere stehen sondern einfach irgendwie eine Fehlermeldung....


Ich hoffe das mein Konzept jetzt klar ist falls immer noch nicht bin ich auch bereit das Beispiel weiter auszuführen

Es geht also vordergründung einfach darum zu sehen welches Revier am besten auf den Fall passt, dabei soll eben diese Vorgehensweise wie oben von mir beschrieben angewendet werden in genau der Reihenfolge

Grüße Casio
 

AndiE

Top Contributor
Hi,

ich versuche mich mal. Soweit ich verstanden habe hast du eine Tabelle Polizeistation(Revier,Täter,Ort,Delikt). Nun füllst du diese mit Daten wie (1010, Ives,F,Baguettediebstahl) oder(2020,Nero,I,Brandstiftung). Irgendwie geht das nicht so, da die Reviernummer doch bei Eingabe der Daten nicht bekannt ist. Ich sehe zwischen revier und Fall eine 1:n-verbinung, wobei Fall(Täter,Ort, Delikt) ist.
 

AndiE

Top Contributor
Gut, ganz genau würde ich noch eine Fall-ID vergeben. Dann kann ich einen Fall(FallID,Täter,Ort,Delikt) eingeben und anhand dieser Einträge in Zuweisung(Revier,FallID) den Fall dem Revier zuweisen. Wie ich einen Fall(FallID,Täter,Ort,Delikt) anlege, wenn ich den Täter erst ermitteln will, ist das Geheimnis des TO.
 

Casio

Mitglied
Hi,

ich versuche mich mal. Soweit ich verstanden habe hast du eine Tabelle Polizeistation(Revier,Täter,Ort,Delikt). Nun füllst du diese mit Daten wie (1010, Ives,F,Baguettediebstahl) oder(2020,Nero,I,Brandstiftung). Irgendwie geht das nicht so, da die Reviernummer doch bei Eingabe der Daten nicht bekannt ist. Ich sehe zwischen revier und Fall eine 1:n-verbinung, wobei Fall(Täter,Ort, Delikt) ist.


ja aber es geht darum, das ich später mal über ein UI neue Einträge mach und eine Methode haben will die quasi vergleicht okay was davon trifft zu? Und daraufhin eben nach der von mir erstellen DB ein Revier aussucht, ich hoffe es ist nun klar worauf ich hinaus will

kann ich das evtl irgendwie über eine for-each schleife machen? Ich hab ja im Prinzip 4 Cases :
1. Case: Revier 1010 ist zuständig
2. Case: Revier 2020 ist zuständig
3. Case: Revier 3030 ist zuständig
4. Case: Kein Revier zuständig irgend eine Errorausgabe

also ich hab 3 Zeilen in meiner DB die ich nacheinander mit dem vergleiche was ich quasi über irgend ein UI (später mal) eingebe wir können ja hardcodiert erstmal das annehmen was ich weiter oben gepostet hatte, wir haben eine Methode die Parameter erwartet und ich gebe dieser dann z.B. dann gewisse Sachen mit und ruf diese Methode halt irgendwo auf so in der Art:

Code:
String aufruf;

aufruf.responsibleRevier(hansi123, F, kaefer_ueberfahren)
 
Zuletzt bearbeitet:

KaffeeFan

Bekanntes Mitglied
Wie wäre es wenn du das ganze mit einer Enumeration machst?
Hoffe ich habe mich jetzt nicht verschrieben, aber z.B. sowas in der Art:

Java:
public enum EinRevier
  {
    R1("Mord", "DEU", 1),
    R2("Brandstiftung", "US", 2),
    R3("Diebstahl", "AUS", 3);

    private String tat;
    private String ort;
    private int Revier;

    EinRevier(String aTat, String aOrt, int aRevier)
    {
      tat = aTat;
      ort = aOrt;
      Revier = aRevier;
    }
   
    public EinRevier getRevier(String aTat, String aOrt)
    {
      for (EinRevier revier : EinRevier.values())
      {
        if (revier.tat.equals(aTat) && revier.ort.equals(aOrt))
        {
          return revier;
        }
      }
      return null; //oder irgendein Fehler
    }
  }
 

Casio

Mitglied
Das wär schön und gut, nur fehlt mir dazu jetzt wiederum, das Wissen wie ich meine Zeilen aus der Datenbank im Programm code jeweils irgendwie auf diese Enumerationen mappe
 

mrBrown

Super-Moderator
Mitarbeiter
Das wär schön und gut, nur fehlt mir dazu jetzt wiederum, das Wissen wie ich meine Zeilen aus der Datenbank im Programm code jeweils irgendwie auf diese Enumerationen mappe

#valueOf und #name ;)
Allerdings haben Enums den Nachteil, das die bereits zur Compilerzeit feststehen müssen.


Jedes Revier hat eine Methode, die prüft ob es dafür zuständig ist (zb Predicate), dann wir einfach nur der Reihe nach geprüft, ob es zuständig ist, und wenn ja, es gesetzt.
Wenn du dynamisch Reviere erstellen willst, musst du dir nur überlegen, wie du die Bedingungen passend speicherst.
In deinem Beispiel einfach Ort, Name, Tat pro Revier speichern, und das Revier kann dann mit den übergeben Daten prüfen, ob es zuständig ist. (Das Prüfen lässt sich natürlich auch in externe Klassen auslagern)
 

stg

Top Contributor
Das wär schön und gut, nur fehlt mir dazu jetzt wiederum, das Wissen wie ich meine Zeilen aus der Datenbank im Programm code jeweils irgendwie auf diese Enumerationen mappe

Du benutzt doch JPA?! Das wird alles automatisch für dich erledigt.
Siehe: @Enumerated
Du kannst hierfür aber auch eigene Converter schreiben, wenn die beiden Standard-Mappings unzureichend sind.
Siehe dazu: @Convert @Converter und AttributeConverter
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9
C datenbank verbindung config Datenbankprogrammierung 23
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
U MySQL Aus Servlet in Datenbank schreiben Datenbankprogrammierung 4
H Datenbank Export mit Java Datenbankprogrammierung 3
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S SQL-Statement Datenbank Zeitbereich durchsuchen Datenbankprogrammierung 2
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
M portable Datenbank Datenbankprogrammierung 2
S Name aus der Datenbank bekommen Datenbankprogrammierung 2
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
MaxG. Access Datenbank Datenbankprogrammierung 48
@SupressWarnings() HSQLDB Datenbank für mein Dorfbauspiel "Time of Kings" Datenbankprogrammierung 6
K SQLite Datenbank in App integrieren: Vor Auslesen schützbar? Datenbankprogrammierung 6
K Java Datenbank auslesen Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben