Hilfestellung zum Thema Persistenz

apx

Mitglied
Hiho,
ich arbeite gerade an einem relativ simplen Projekt, das ermöglicht über Listen (die Produkte und die dazugehörige Preise enthalten) ausrechnet was eine angelegte Person für eine bestimmte Menge an Produkten bezahlen muss. (z.b. 5x P1 á 10€ + 1x P2 á 5€ = 55€ anfallende Kosten)

Realisiert habe ich es bisher folgendermaßen:

Personen und Produkte sind Objekte, die ich jeweils in eine übergeordnete Liste - im jetzigen Fall als ArrayList - zusammenfasse.

Java:
ArrayList<Person> personen = new ArrayList();
ArrayList<Item> items = new ArrayList();

Person p1 = new Person("Meier");

Item i1 = new Item("Beispielprodukt", 1_500_000);

personen.add(p1);
items.add(i1);

//beispiel vom weiteren handling bisher:
//einkaufen/verkaufen(listenname, index, menge)
personen.get(0).einkaufen(items, 0, 2);
personen.get(0).verkaufen(items, 0, 2);
System.out.println(personen.get(0).getKontoStatus());

Nun habe ich ja 2 Listen über die ich mit den verschiedenen Objekten arbeiten kann.
Meine eigendliche Frage ist nun, wie bekomme ich diese beiden ArrayList -personen und items- am einfachsten/besten peristent, damit ich mit einmal angelegten Personen und Produkten weiterarbeiten kann.
Und gäbe es vllt elegantere Lösungen als eine ArrayList um sowas zu realisieren?
 

ARadauer

Top Contributor
ArrayList ist natürlich nicht persistent...

Am einfachsten.. in eine CSV schreiben.
Am elegantesten mit Hibernate in eine Datenbank.
 

apx

Mitglied
ArrayList ist natürlich nicht persistent...

das war mir schon klar ;)

Aber meine frage war eher darauf ausgerichtet, ob und wie man eine mit Objekten gefüllte ArrayList (o.ä.) abspeichern kann, die dann z.B. bei Programmstart über eine 'readFile' Methode direkt wieder eingelesen wird und anschließend benutzt werden kann.

Vllt ist mein ursprüngliches Konzept mit ArrayList zu arbeiten ja zu umständlich, deshalb frage ich ja extra. :)

Habe zwar schon mit ObjectOutputStream geschafft eine gefüllte ArrayList zu serialisieren, allerdings gelingt mir das Einlesen nicht so ganz. Hänge irgendwie beim Verständnis mit ObjectInputStream das geladene Objekt zurück in die eigendliche ArrayList zu schreiben. :reflect:

so sieht bis jetzt mal meine writeFile Methode aus:
Java:
public void writeFile(ArrayList list, String dateiname) {
        dateiname += ".ser";
        try (ObjectOutputStream outsteam = new ObjectOutputStream(new FileOutputStream(dateiname))) {
            outsteam.writeObject(list);
            outsteam.flush();
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }

Ein Codebeispiel für die rückführung wäre vermutlich sehr hilfreich^^
 
Zuletzt bearbeitet:

censored

Mitglied
Ich hoffe, ich habe die Frage richtig verstanden.
Hier wäre es natürlich schön, mit ner Datenbank zu arbeiten. Sonst kannste die Liste einfach in einem File speichern, und beim Start dieses auslesen.
 
V

vanny

Gast
Warum willst du die ArrayList speichern?
Wie ARadauer schon geschrieben hat, genügen doch die Daten in einer Datei oder Datenbank.
Ob CSV, XML oder TXT sei mal dahingestellt.
Aus diesen Daten kannst du dir doch bei jedem Start oder sogar nur suchspezifisch deine ArrayList zur Laufzeit befüllen.

Gruß Vanny
 

apx

Mitglied
Hier wäre es natürlich schön, mit ner Datenbank zu arbeiten. Sonst kannste die Liste einfach in einem File speichern, und beim Start dieses auslesen.

Beide Ansätze wären sicherlich interessant. Für eine spätere und ausgereiftere Version ist von mir zwar DB anbindung gedacht, damit auch mehrere Personen untereinander mit den gleichen Werten arbeiten können, aber für den Anfang dachte ich mir das es Lokal in einer Datei, unabhängig von Datenbanken, einfacher ist.

Das ganze ist für mich ja ein Lernprojekt mit praktischen Nutzen ;)

Warum willst du die ArrayList speichern?
Wie ARadauer schon geschrieben hat, genügen doch die Daten in einer Datei oder Datenbank.
Ob CSV, XML oder TXT sei mal dahingestellt.
Aus diesen Daten kannst du dir doch bei jedem Start oder sogar nur suchspezifisch deine ArrayList zur Laufzeit befüllen.

Gruß Vanny

Da sich in der ArrayList ja Objekte mit Variablen und Methoden befinden auf die während der Laufzeit zugegriffen werden sollen weiss ich ja nicht ob das dann SO machbar ist.

Aber ich sage ja, wenn jemand ein besseres Konzept hat, ich höre gerne zu^^
 
Zuletzt bearbeitet:
V

vanny

Gast
die Objekte erstellst du doch wieder, wenn du die Daten aus deinem persistenten Speichertyp einliest.
Du erzeugst Dir wieder eine Liste der benötigten Objekte.;)

[EDIT]Wenn ich das richtig deute, dann willst du Rechnungen erstellen.
Kleines Gedankenspiel:
Eine Rechnung hat eine(n) Kunden/Person und eine Liste von Rechnungsposten, die dann jeweils Artikel, Preis und Menge halten.

Das ganze lässt sich wunderbar sowohl als OOP als auch in Tabellenform für die Datenbank strukturieren.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

apx

Mitglied
um mal darzustellen was das Programm im Grundgerüst machen soll/kann:

Man erstellt man eine Person.
Diese kann sich über
Code:
einkaufen()
und
Code:
verkaufen()
eine bestimmte Menge an eingetragenen Items zuordnen (können sich bei Verkauf ein Haben ausgegeben lassen, bei Ankauf ein Soll).

Die Items selbst sind auch eigenständige Objekte die jeweils
Code:
String name
,
Code:
double preis
besitzen (werden über Konstruktor initialisiert) und Getter / Methoden besitzen um spezielle Details zu ihnen auszugeben.

Mein erster Gedanke war eben, die Items und Personen einfach in ArrayListen zu packen um nur noch 2 "große" Pakete zu haben.

...ursprünglich habe ich es auch in einem Spreadsheet gelöst, allerdings ist die ganze Verwaltung mit wachsender Anzahl an Personen und Items, unterschiedlichen Mengen bei unterschiedlichen Personen ziemlich aufwendig geworden. Da habe ich mir irgendwann gedacht, dass ein eigenständiges Programm die auf dauer wohl um einiges angenehmere Lösung ist :)
 
Zuletzt bearbeitet:
V

vanny

Gast
Siehe meinen Post zuvor :p
Zwei große Haufen sind halt kein schönes OOP und nur um 2 ArrayLists zu serialisieren auch kein guter Konzeptansatz.

Gruß Vanny
 

kaetzacoatl

Bekanntes Mitglied
Java:
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList rtn = (ArrayList) ois.readObject();
return rtn;
 

censored

Mitglied
Das ist doch wirklich schön für eine Datenbank.
aber für den Anfang dachte ich mir das es Lokal in einer Datei, unabhängig von Datenbanken, einfacher ist.
Nur wenn du noch nie mit Datenbanken gearbeitet hast, was ich dir wirklich sehr empfehlen kann. Je früher du das Programm mit Datenbanken versorgst, desto weniger arbeit hast du später um alles umzuprogrammieren.
Natürlich ginge es auch mit Files, doch eine Datenbank ist halt einfach viel komfortabler.
Wenn du das nötige Wissen noch nicht hast, dann schadet es sicher nicht, um es zu erlangen.
Sonst wenn du wirklich unbedingt mit Files arbeiten willst, dann kannst du zwei Files erstellen. In das eine Schreibst du deine Personen rein, und in das andere deine Items.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
J Hilfestellung zu Hochschulaufgaben Java Basics - Anfänger-Themen 19
J Suche Hilfestellung Java Basics - Anfänger-Themen 10
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
R Hilfestellung bei Iteratorimplementierung Java Basics - Anfänger-Themen 4
P Hilfestellung bei einer Aufgabe Java Basics - Anfänger-Themen 3
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
N BinärBaum Hilfestellung Java Basics - Anfänger-Themen 8
G hilfestellung bei Array Java Basics - Anfänger-Themen 5
M Hilfestellung zur schularbeit Java Basics - Anfänger-Themen 17
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
Kotelettklopfer Java und das leidige Thema "wording" Java Basics - Anfänger-Themen 61
N Thema Vererbung Java Basics - Anfänger-Themen 31
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Was könnten typische Prüfungsaufgaben zum Thema lineare, verkettete Listen sein? Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
F Concurrent Thema Java Basics - Anfänger-Themen 6
T Klassen Kleine Übung zum Thema Klassen Java Basics - Anfänger-Themen 3
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
E Erste Schritte Vorschläge für mich zum Thema Punkt vor Strich ? Java Basics - Anfänger-Themen 7
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
J Frage zum Thema ... alles mögliche! Java Basics - Anfänger-Themen 6
P Noch zum Thema Arrays Java Basics - Anfänger-Themen 13
T Bin Anfänger ... das Thema auch ? Java Basics - Anfänger-Themen 10
N JAR das Endlose Thema Java Basics - Anfänger-Themen 2
J Neues Forum Thema erstellen mit java(httpclient) Java Basics - Anfänger-Themen 11
Dit_ Frage zum Thema Speicherreservierung Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
I Verständnisfrage zum Thema APIs Java Basics - Anfänger-Themen 6
G Dieses leidige ID Thema Java Basics - Anfänger-Themen 9
N Das alte Thema "File Encoding" Java Basics - Anfänger-Themen 2
D Frage zum heiss geliebten Thema MVC Java Basics - Anfänger-Themen 24
D Abschlussklasse 13 Projektarbeit, thema? Java Basics - Anfänger-Themen 15
J Fragen zum Thema Arrays Java Basics - Anfänger-Themen 5
P Applet not inited - leidiges Thema Java Basics - Anfänger-Themen 6
Z leidiges Thema Datumsformatierung Java Basics - Anfänger-Themen 3
G Leidiges Thema Classpath Java Basics - Anfänger-Themen 5
G Syntax der if-Anweisung (Thema getrennt!) Java Basics - Anfänger-Themen 7
Helgon Persistenz vs DB vs XML? Java Basics - Anfänger-Themen 5
H Verständnisfrage Persistenz Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben