Fragen zur Datenspeicherung

Diskutiere Fragen zur Datenspeicherung im Java Basics - Anfänger-Themen Bereich.
C

christian30251

Schönen Vormittag.

Ich hätte mal eine eher allgemeine Frage zur Datenspeicherung in Programmen.
Für größere Anwendungen ist es mir völlig logisch, dass die Daten zumeist (auch da meist viele Daten vorhanden sind) in einer beliebigen Datenbank gespeichert werden. Wie verhält es sich aber üblicherweise bei kleinen bzw. Kleinstprogrammen?

Ein Beispiel: Ich möchte für die Arbeit eine kleine Desktop-App entwickeln, die das Ablaufdatum unserer Notfallmedikamente speichert, welche ich zuerst eingebe und dann stets aktuell halte. Ein paar Wochen vor Ablauf des Medikaments soll die App mir eine Info anzeigen, dass ich wieder Nachschub besorgen muss. Aber extra dafür eine Datenbank? Gibt es vielleicht "schlankere" Möglichkeiten?

Danke für eure Inputs :)

Beste Grüße
Christian
 
J

JustNobody

Also generell bedeutet eine Datenbank nicht mehr Arbeit. Libraries wie Hibernate machen das alles extrem einfach (Aber man muss es halt kennen).

Aber man kann auch andere Formate nutzen. So kann man als Anfänger, wenn an möglichst wenig an neuen Technologien lernen möchte, z.B. die Daten per ObjectOutputStream speichern und per ObjectInputStream wieder einlesen. Diese binary Serialisierung kommt aber auch mit gewissen Nachteilen, weshalb sie in der Software Entwicklung eigentlich keine wirkliche Rolle spielt.
XML und JSON sind dann noch zu nennen. Da gibt es dann auch entsprechende Libraries, die die Serialisierung für einen machen.
Das wird dann auch genutzt um komplexere Dokumente zu speichern dann aber zum Teil als ZIP verpackt.

Also je nachdem, wo du hin möchtest, wäre die Nutzung einer Datenbank durchaus angebracht (Das muss keine extra installierte Datenbank sein. Es gibt "embedded" Datenbanken, so dass Du nur die Applikation selbst hast. H2, HSQLDB, SQLite, ...

Wenn Du aber mehr Anfänger bist und dies eine erste Applikation wird für Dich und Du nicht viel Zeit mit neuen Technologien zubringen möchtest: Dann nutz ruhig erst einmal den genannten ObjectOutputStream / ObjectInputStream zu Speichern und Laden deiner Daten. Dann hast Du schnell erste Erfolge und Du kannst das ja dann mit der Zeit verfeinern und erweitern.

(Da würde ich dann aber auch XML und JSON außen vor lassen. Da wären sonst auch Libraries zu nutzen, die da eine Komplexität mit rein bringen. Aber generell würde ich vor Komplexität nicht zurück schrecken, denn ein Ziel sollte immer sein, auch Neues dazu zu lernen.)
 
H

httpdigest

Bevor du über die Entwicklung einer eigenen Anwendung nachdenkst, überlege vielleicht einmal, ob für deinen Anwendungsfall nicht einfach Excel, Access oder OpenOffice eine bessere Alternative wäre. Ich habe schon einige einfache Anwendungen für simple Datenerfassung gesehen und geschrieben und im Nachhinein dabei immer festgestellt: ja, man hätte das auch sehr viel schneller und wartbarer mit einer einfachen Tabellenkalkulationssoftware realisieren können. Zum Beispiel einfach ein Medikament pro Zeile und eine Spalte für das Ablaufdatum und einen Spaltenfilter für "Datum minus heute innerhalb von zwei Wochen". Fertig.
Mit einer eigenen Anwendung hast du immer das Problem, dass diese sowieso irgendwann obsolet wird bzw. nicht mehr gewartet wird, wenn die Person, die sie mal geschrieben hat, das Unternehmen wieder verlässt. Der Invest, den ein Unternehmen eingeht, wenn es sich dazu entschließt, Unternehmensprozesse mit selbst geschriebener Software zu unterstützen, darf niemals unterschätzt werden.
 
T

temi

Bevor du über die Entwicklung einer eigenen Anwendung nachdenkst...
Das ist völlig korrekt, besonders, wenn es um so eine eher einfache Anwendung geht.

Allerdings hängt das natürlich von deinen Beweggründen für diese Anwendung ab. Brauchst du nur dringend eine Verwaltung für die Notfallmedikamente, dann gilt der Einwand von @httpdigest.

Geht es dir darum Java zu lernen und du suchst dafür eine sinnvolle Aufgabe, die dir dann auch noch im Alltag hilft, dann mach das gerne.
 
C

christian30251

Hi zusammen!

Ich danke euch für eure Tipps.
Tatsächlich geht es mir nur um Training in Java. Im Grunde haben wir das auch so wie von httpdigest schon vorgeschlagen, gelöst. Ich gebe dir in jeder Hinsicht recht. Mir geht es nur darum, mit Java etwas zu machen. Ich bin Anfänger, und möchte einfach Theorie in Praxis umsetzen. Und dieses Programm erscheint mir jetzt nicht zu schwer für den Anfang, ich kann nach Lust und Laune immer weiterbasteln und hat einen Praxisbezug für mich, was es mir viel leichter macht.

Ich werde mir die Tipps von JustNobody zu Herzen nehmen und mich mal langsam aber sicher daran machen. :)
 
J

JustNobody

Dann führe doch einmal aus, wie die Blockchain Technologie hier angewendet werden könnte oder sollte.

Ansonsten ist der Beitrag relativ sinnlos und der Aufwand für so einen Beitrag einen neuen Account anzulegen schlicht verschwendet.

Wenn du an meinem Beitrag was auszusetzen hast: dann ergänze ihn, äußere Deine Sicht. Ich erinnere mich, dass du die binary Serialisierung in der Vergangenheit so sehr geschätzt hast (ohne dafür aber jemals Argumente zu bringen...).
 
J

JustNobody

Ernsthaft? Es wurde ja vieles nicht erwähnt, aber auf Blockchain zu kommen... Du hast schon gelesen, um welche Daten es hier geht?
Oh, zerreiss die Idee doch nicht, ehe er sie etwas ausgeführt hat. So werden wir nie erfahren, ob es sich um reines Bullshit Bingo handelte oder er sich etwas gedacht hat ....

Aber für den TE einfach mal ein Link, der etwas zu Blockchain aussagt: http:://www.computerwoche.de/a/amp/blockchain-was-ist-das,3227284

Die einfache Beschreibung / Übersicht hilft evtl., um schnell entscheiden zu können, ob diese Technologie in Frage kommt oder nicht...
 
T

temi

Ich persönlich würde mir für diesen Fall mal die CSV-Datei ins Auge fassen. Die lässt sich auch für Anfänger, ohne spezielle Bibliotheken, einfach handhaben und es gibt auch viele Beispiele (Stichworte: BufferedReader und FileReader) im Netz (und auch hier im Forum).

Toller Vorteil wäre folgender: Excel kann CSV sowohl lesen, als auch schreiben. Du kannst also die Daten relativ leicht aus der vorhandenen Datenbasis importieren (oder auch umgekehrt).

Zweiter Vorteil: Die CSV-Datei ist auch für Menschen einfach lesbar (ist ja ne Textdatei), so dass man leicht kontrollieren kann, ob das Speichern funktioniert. Und für das Lesen, kann man auch einfach mal eine Testdatei von Hand erstellen.
 
Zuletzt bearbeitet:
W

White_Fox

CSV wollte ich auch vorschlagen. Nach bisherigem Stand würde ich sagen, es ist die beste aller Möglichkeiten (selbst wenn es nicht unbedingt ein simples Übungsprojekt wäre, wäre die Wahl definitiv nicht schlecht).
 
B

BestGoalkeeper

Hier ist mal eine minimales Json-Beispiel in weniger als 100 Zeilen; und zugegeben, die Eingabe könnte besser sein... aber dann landet man schnell bei der von @httpdigest vorgeschlagenen Tabelle:
Java:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import javax.swing.JOptionPane;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Medis {

	public static class Medi implements Comparable<Medi> {
		public static final SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateInstance();
		static {
			sdf.applyPattern("dd.MM.yyyy");
		}
		public String name, zusatz;
		public String zugelegtAm, verbrauchtAm;
		public int status = 1;

		public Medi() {
			Date d = new Date();
			this.name = "n";
			this.zusatz = "z";
			this.zugelegtAm = sdf.format(d);
			this.verbrauchtAm = sdf.format(d);
			this.status = 1;
		}

		public Medi(String name, String zusatz, String zugelegtAm, String verbrauchtAm, int status) {
			this.name = name;
			this.zusatz = zusatz;
			this.zugelegtAm = zugelegtAm;
			this.verbrauchtAm = verbrauchtAm;
			this.status = status;
		}

		public int getDif() {
			try {
				return (int) Math.round((sdf.parse(verbrauchtAm).getTime() - new Date().getTime()) / (1000.0 * 60.0 * 60.0 * 24.0)) + 1;
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return -1;
		}

		@Override
		public int compareTo(Medi o) {
			return this.getDif() - o.getDif();
		}

		@Override
		public String toString() {
			return String.format("Medi [name=%s, zusatz=%s, zugelegtAm=%s, verbrauchtAm=%s, verbrauchtIn=%s, status=%s]", name, zusatz, zugelegtAm, verbrauchtAm, this.getDif(), status);
		}

	}

	private static final File file = new File("meds.txt");
	private static ArrayList<Medi> meds = new ArrayList<>();

	public static void main(String[] args) throws IOException {
		Gson gson = new Gson();

		if (file.exists()) {
			try (FileReader r = new FileReader(file)) {
				meds = gson.fromJson(r, new TypeToken<ArrayList<Medi>>() {
				}.getType());
			}
		}

		while (true) {
			String j = gson.toJson(new Medi());
			String s = JOptionPane.showInputDialog("Neu:", j);
			if (s == null) {
				break;
			}
			Medi m = (Medi) gson.fromJson(s, Medi.class);
			meds.add(m);
			System.out.println("Veraucht in Tage: " + m.getDif());
		}

		try (PrintWriter w = new PrintWriter(file)) {
			gson.toJson(meds, w);
		}

		Collections.sort(meds);
		for (Medi m : meds) {
			System.out.println(m);
		}
	}

}
Pöbeln kann ich auch. :/
 
T

thecain

Dann das json direkt in der JOptionPane editieren?

Und wo ist jetzt der Blockchain Ansatz?
 
B

BestGoalkeeper

Mit Blochchain ginge das auch, wenn man die Integrität der Datensätze sicherstellen möchte. Hab ich aber jetzt nicht umgesetzt.

Dann das json direkt in der JOptionPane editieren?
Ja, so ist das gedacht, je nach dem, wie viele Felder man haben möchte, trägt man die Werte dann in dem vorformatierten Textfeld ein.

Man kann natürlich noch einen Status hinzufügen, vielleicht einen für "schon nachbestellt" == 2 oder so ähnlich. Danach könnten nur noch "bald zu bestellende Medikamente" angezeigt werden bzw. könnte vorher entsprechend sortiert werden. Aber das geht schon ins Detail.
 
C

christian30251

Schönen Abend!

Erstmal DANKE an alle für eure Inputs! Auch wenn ich hier noch nicht allzu viel mitreden kann, verfolge ich das mit großem Interesse.
Blockchain halte ich als Java Anfänger momentan für (noch) zu kompliziert, ich möchte es gerade jetzt eher einfach halten, um Erfolgserlebnisse zu haben und dann auch dran zu bleiben :) Dennoch danke - immerhin weiß ich jetzt was das ist und wie es prinzipiell funktioniert! Das ist auf jeden Fall auch etwas!

Von allen Vorschlägen, und das waren schon einige, wäre mir jetzt momentan auch die Variante mit CSV die sympathischste. Gerade der Fakt, dass man diese auch in Excel erstellen/bearbeiten kann, ist hier durchaus ein Vorteil.
Ich denke, ich werde das mal so umsetzen versuchen. Später, um mit der Technologie vertraut zu werden, werde ich das ganze auch einmal in Form einer einfachen Datenbank - wie vorgeschlagen - aufbauen. Und mich so kontinuierlich steigern.

Super, dass hier so rege diskutiert wird. Hier kann man wirklich was lernen als Beginner :)

Danke nochmal an alle!!!!
 
C

christian30251

Eine Frage: Könnte man die Daten auch mit XML speichern? Das würde mich nämlich auch interessieren ....?
 
Thema: 

Fragen zur Datenspeicherung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben