JTextField Eingabe in DB speichern

Bitte aktiviere JavaScript!
A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
Ich will einfach nur eine Auflistung aller Stationen in der DB haben

Die Stationen gebe ich in einer separaten Klasse in ein JTextArea ein und splite sie per Zeilenumbruch.
 
Die Station ist ja eine separate Tabelle. Jeder Datensatz hat dort eine eindeutige ID (zb)
Ich verstehe das Problem gerade nicht
 
Also...

Ich habe eine Klasse Editor mit Textfeldern die ich mit Eingaben fülle.
Ein Textfeld davon ist eine JTextArea.
Dort gebe ich per Zeilenumbruch eine Auflistung von Haltestationen an und splite sie nach jedem Zeilenumbruch.

Ich habe eine Datenbank mit dazugehörigen Tabellen. In die will ich jetzt alles reinschreiben.

Java:
preparedStatement.setArray(18, listeStationen);
Habe jetzt statt String -> Array geschrieben und in der Klasse Editor von String[] -> in Array.
Jetzt meckert er in der Klasse Editor:

Java:
listeStationen = txtnStations.getText().split("\n");
mit "Can not convert from String[] to Array"

listeStationen ist mit static Array listeStationen deklariert
 
Und bitte lass die technischen Dinge weg. Hier ist es erstmal irrelevant wie die View aussieht / wie die Daten eingelesen werden.
Wichtig ist was du erreichen willst, was gespeichert werden muss,...
 
Nein. Ein Admin soll die Möglichkeit haben einen neuen Fahrplan zu erstellen. Die Daten dafür sollen per Hand eingegeben werden (später käme noch Import/Export von csv/xml Dateien hinzu).

Eingegeben werden sollen
Leistung (quasi ID)
Beginn- und Enddatum
Wie oft der Zug an welchen Tagen fährt
Abfahrt- / Ankunftszeit
Zug
Linie
Start
Ziel

und eben alle Stationen die angefahren werden.
Ich bekomme alles in die DB geschrieben und kann sie auch abrufen, nur eben die angefahrenen Stationen nicht.
 
Was heißt "wie oft der Zug an welchen Tagen fährt"? Wenn die Abfahrts- bzw. Ankunftszeit angegeben ist, kann er ja nicht mehrfach zu dieser Zeit fahren. Andersrum gesagt: ergibt sich die Anzahl nicht aus den Zeiten?

Unabhängig davon: es gibt eine Haltestellentabelle und es gibt eine Leistungstabelle. Die beiden dürften in einer n:m-Relation zueinander stehen. Du brauchst also noch eine Tabelle, die eine Haltestelle einer Leistung zuordnet.
 
Die Gestaltung der Tabellen ist noch nicht final und um die geht es vorerst nicht.

Meine Frage ist (wie schon so oft gesagt) einfach nur wie ich eine Auflistung von Stationen in eine DB Tabelle kriege.


EDIT: Bin grade am überlegen ob ich nicht einfach nen normalen String erstelle, dort alle Stationen kommasepariert reinpacke, und beim DB auslesen dann einfach nach jedem Komma splitte a
 
Code:
Leistung
--------

(Tage habe ich wg. besserer Darstellung weggelassen)

ID  | Linie | Zug | Abfahrt | Ankunft | Start | Ziel
123 | S1    | 321 | 13:00   | 14:00   | Ort1  | Ort2


Haltestellen
------------
ID  | Name 
 1  | Ort 1, Hauptbahnhof
 2  | Ort 2
 3  | Ort 3
 4  | Ort 5
...
100 | Ort 2, Hauptbahnhof


Zuordnung
---------

Leistung | Haltestelle 
     123 | 1
     123 | 2
     123 | 10
     123 | 22
     123 | 80
     123 | 100
Die Zuordnung gibt für jede Leistung an, welche Haltestellen angefahren werden. Natürlich bräuchtest Du noch ein Ordnungskriterium, das können einfach Zahlen oder z. B. Uhrzeiten sein.
 
Jetzt ist mir gerade eingefallen, dass im Bahnbereich ja in der Regel mit DS100 Codes gearbeitet wird. Die könnten dann als Key der Haltestelle dienen. Wenn Du keine Details zur Hst brauchst, könntest Du die Haltestellentabelle weglassen und die Zuordnungstabelle würde genügen.
 
Danke dir erstmal. Schaue mir dein Beispiel an wenn ich die DB verfeinere!

Jetzt mal wieder zurück zu den lästigen Stationen.
Wie würde der Code aussehen, wenn ich die Stationen aus der DB einlesen, kommasepariert splitten und ausgeben will?


EDIT: Und gibt es eine Möglichkeit, Datum von und bis in eine Tabelle zu schreiben, sodass auch die Daten dazwischen geschrieben werden?

Also:
DatumVon: 01.01.2000
DatumBis: 31.12.2000

das soll geschrieben werden:
01.01.2000
02.01.2000
03.01.2000
...
31.12.2000
 
Zuletzt bearbeitet:
Jetzt mal wieder zurück zu den lästigen Stationen.
Irgendwie schreiben wir aneinander vorbei: wir schreiben doch die ganze Zeit von den Stationen :)

wenn ich die Stationen aus der DB einlesen, kommasepariert splitten und ausgeben will?
Du speicherst die Stationen nicht in einem Feld sondern so, wie ich es oben dargestellt habe: zu jeder Leistung gibt es eine Liste (=Datensätze einer Tabelle) mit Stationen. Das wäre zumindest die normalisierte Form.

Um dann die Stationen zu einer Leistung abzurufen, brauchst Du lediglich einen SELECT.

Wenn Du die Daten unbedingt nicht normalisiert speichern willst, dann kannst Du im einfachsten Fall den String per ResultSet#getString() aus der DB laden und per String#split() wieder aufteilen. Das funktioniert natürlich nur, wenn sichergestellt ist, dass das Trennzeichen in den Stationen nicht auftreten kann. Ansonsten müsstest Du größere Geschütze auffahren.

Und gibt es eine Möglichkeit, Datum von und bis in eine Tabelle zu schreiben, sodass auch die Daten dazwischen geschrieben werden?
Du iterierst in einer Schleife über die Tage im Zeitraum und erzeugst für jeden Tag jeweils einen Satz.

Java:
LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
    preparedStatement.setDate(1, java.sql.Date.valueOf(date));
    preparedStatement.setDate(2, ...);
    // ...
    preparedStatement.addBatch();
}
preparedStatement.executeBatch();
 
In MySql soll es einen generate_series Befehl geben um einen Zeitraum Von - Bis zu schreiben. Kann ich diesen Befehl nicht in meinen Code verpacken?
Alles einzeln abzutippen ist ja total mühsam
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben