4 Stimmen

Datenspeicher für Videospielbuchungen

Die zugewiesene Hausaufgabe benötigt eine Funktion zum Speichern eines vom Benutzer ausgewählten Videospiels. Es handelt sich um ein kleines Schulprojekt, und ich habe mich gefragt, wie man die Informationen am besten speichern kann. Das Programm muss auf die Buchungen des Videospiels zugreifen, aber ich denke, dass eine Datenbank für so eine kleine Aufgabe ein wenig übertrieben ist.

Was würden Sie tun?

2 Stimmen

Dies ist eine kontextabhängige Frage, die fast immer von den spezifischen Daten abhängt, die Sie zu speichern versuchen.

7voto

jjnguy Punkte 132790

Für kleine Schulprojekte erfinde ich in der Regel mein eigenes Dateiformat.

In der Regel handelt es sich um eine einfache CSV-ähnliche Datei mit einer Art Schlüssel-Wert-Paar.

Je nach Art der Informationen, die Sie speichern müssen, kann XML der richtige Weg sein.

Wenn die Informationen nur für einen kurzen Zeitraum gespeichert werden müssen (ein Durchlauf der Anwendung) und die Menge der zu speichernden Daten relativ gering ist, wird das Programm durch die Speicherung aller Daten im Arbeitsspeicher mit Sicherheit viel schneller und in der Regel auch einfacher zu schreiben sein.

0 Stimmen

Ich stimme jjnguy zu. Dies ist nur ein Schulprojekt und der OP ist richtig, dass mit einer Datenbank ist over the top; flache Dateien sind für diese Art von Sache groß. Sie sollten sich Berkeley DB auch für diese Art von Dingen ansehen; Sie können Ihre Objekte in eine persistente Karte serialisieren, indem Sie es verwenden.

6voto

strange Punkte 9524

Kai hat Recht, obwohl eine gute Möglichkeit zur Verwaltung der Buchungsdaten von Videospielen eine kleine Datenbank wäre (versuchen Sie es mit Sqlite). Ich bin mir sicher, dass Sie die Buchungsinformationen mit einem Benutzer verknüpfen möchten, so dass jede Art von Beziehung auch die Verwendung einer Datenbank rechtfertigen würde.

0 Stimmen

Obwohl Textdateien verschiedener Art funktionieren könnten, denke ich, dass es so wenig zusätzlichen Aufwand bedeutet, eine DB zu verwenden, dass ich das tun würde.

0 Stimmen

HSQLDB und SQLite sind ziemlich einfach einzurichten und zu verwenden; ich würde auch vorschlagen, eine Datenbank zu verwenden. Wenn Sie Flat-Files für dieses Projekt verwenden, werden Sie wahrscheinlich sowieso nur etwas Ähnliches wie eine Datenbank implementieren, mit einer Flat-File für jede Tabelle - Sie werden nur nicht die nette API und Abfragefunktionen haben, die eine Datenbank bietet.

2voto

perimosocordiae Punkte 16339

Ich denke, die einfachste Lösung ist, das Objekt, das Ihre Daten enthält, zu serialisieren und dann auf die Festplatte zu schreiben (wählen Sie eine beliebige Dateierweiterung, die Ihnen gefällt). Lesen Sie einfach die Datei und Sie haben Ihr Objekt zurück!

FileInputStream fis = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(fis);
Foo f = (Foo)in.readObject();

Hier finden Sie eine gute Anleitung für den gesamten Prozess: Entdecken Sie die Geheimnisse der Java Serialization API

1 Stimmen

Es ist sehr einfach, seinem zukünftigen Ich mit der Serialisierung das Leben schwer zu machen.

0 Stimmen

Es ist zwar keine "echte" Lösung, aber für Projekte mit begrenzter Lebensdauer (z. B. Schulprojekte) ist sie sehr gut geeignet.

0 Stimmen

Warum sollte die Serialisierung die Dinge erschweren?

1voto

vinnybad Punkte 2082

Es könnte hilfreich sein, wenn Sie etwas genauer wären, aber...

Ich denke, dass die Aufgabe Sie dazu bringen soll, zu verstehen, dass das Programm die Datentypen und die Größe der Daten (zeilen- und spaltenweise) erst zur Laufzeit kennt.

Von dem, was Sie mir sagen, würde ich versuchen, eine Tabelle durch eine veränderbare Liste zu modellieren. Programmieren Sie es generisch, so dass Sie die Implementierung auswechseln können:

List> table = new ArrayList>();

Sind das nur Videospiele? Wenn ja, würde ich ein VideoGame-Objekt erstellen, Felder wie Name, Hersteller, System usw. speichern und in eine veränderbare Datenstruktur einfügen - und fertig! Es hängt alles von den Operationen ab, die Sie mit der Liste durchführen wollen...suchen und sortieren Sie? Sind die Abrufzeiten für Sie von Bedeutung?

Wenn Sie wollen, dass der Abruf O(1) oder, ungenau ausgedrückt, "etwa eine Anweisung" dauert, sollten Sie eine Map verwenden. Wenn der Schlüssel der Name eines Videospiels ist, wird er in O(1) zurückgegeben. Wenn es mehrere Einträge gibt, sollten Sie eine Liste als Wert verwenden.

Ich hoffe, das war nicht zu lang und verwirrend, aber bitte geben Sie an, ob die Anzahl der Felder bekannt ist oder ob sie ganz allgemein sein muss. Wenn es ganz allgemein sein muss, verwenden Sie einfach eine Datenbank! Sie ist dafür gemacht, generisch zu sein... oder wenn Sie das wirklich nicht tun wollen, verwenden Sie die erste Methode, die ich beschrieben habe.

Ich hoffe, es hilft.

1voto

Erstellen Sie Ihr eigenes Textdatei (CSV usw.)
Pro : Leicht zu bearbeiten
Betrug : Sie müssen das gesamte Marshalling selbst durchführen. Und das Dateiformat erstellen. Sie werden wahrscheinlich mit einer schlecht geschriebenen Datenbank enden. Wenn Sie die Objekte schlecht schreiben, kann das Ändern der Objekte zu einem echten Problem werden.

Serialisieren Sie die Objekte (entweder im Binärformat oder XML)
Pro : Etwas anderes kümmert sich um das Marshalling (bei Verwendung von "Beans" mit Binär- und XML-Daten einbauen)
Betrug : Der Wechsel zwischen verschiedenen Java-Versionen könnte eine binär formatierte Serialisierung zerstören. XML erfordert Beans.

Benutzerdefinierte XML-Datei
Pro : XML wird in Java gut unterstützt
Betrug : Sie werden wahrscheinlich am Ende von bestehenden Marshalling-APIs erschreckt und rollen Sie Ihre eigenen (mit der Java-XML-APIs man hofft). Dann landen Sie im gleichen Raum wie Textdateien (eine schlecht geschriebene Datenbank).

Eingebettete Datenbank
Pro : SQL ist sexy.
Betrug : Wenn Sie nicht bereits über SQL-Kenntnisse verfügen und/oder ein ORM-Produkt verwenden, kann ORM ein wenig mühsam sein.

Ich würde mich wahrscheinlich für eine eingebettete Datenbank + JPA entscheiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X