Datentypen supersimple Datenbank

subn0de

Mitglied
Hallo!

Ich benötige eine kleine Datenbank. Die Einträge sähen etwa so aus:

79100:Frau Frauke
78000:Herr Herbert
79700:Herr Honk

usw. Wenn ich nun 79 in mein Suchfeld eingebe, möchte ich dass Frauke und Honk ausgegeben werden. Wäre super, wenn mich jemand in die richtige Richtung schubsen könnte ;)

gruss,
sn0
 

Landei

Top Contributor
Wenn die Nummern immer eindeutig sind und du immer "von vorn" suchst, ist ein Trie die effektivste Datenstruktur, und wenn du genug Speicher hast, um alle Daten von einem File in einen solchen einzulesen, wären die Suchen darin ziemlich schnell (das Aufbauen des Tries eher nicht). Ob es da schon etwas fertiges "datenbankähnliches" gibt, weiss ich nicht. Mit einer normalen SQL-Datenbank geht immer noch eine Abfrage wie ... where myID LIKE '79%' ..., auch wenn das weniger effizent ist.
 

Guybrush Threepwood

Top Contributor
Ich denke, hier im Anfängerforum sollte eine wirklich einfache Lösung gefunden werden.
Auch wenn es bessere Möglichkeiten gibt: Wie wäre es, eine geeignete Klasse (mit einem int und einem String) zu definieren und die Objekte einfach in einer Liste zu halten. Darstellen kann man das in einer JTable, die ja bereits über die passende Filterfunktionalität verfügt. Speichern kann man das über eine einfache Textdatei und bei Programmstart in den Speicher laden (sofern die Datenmenge nicht zu groß ist).
 

Landei

Top Contributor
Wenn die Datenmenge nicht zu groß ist, um sie im Speicher zu halten, kann man das entsprechende Objekt einfach serialisiert auf die Platte legen.
 

subn0de

Mitglied
Danke für die vielen Antworten!
Ich habe es nun mir einer ArrayList gelöst, welche durch ein String abgefragt wird:
Java:
for(int i = 0; i < arraylist.size(); i++)
  if(arraylist.get(i).startsWith(string))
    System.out.println(arraylist.get(i));
 

subn0de

Mitglied
Zwei Probleme habe ich noch:
Zum einen werden die Ergebnisse nicht richtig angezeigt - wenn ich 79 eingebe, erscheint auch 78, allerdings weiss ich nicht woran das liegen könnte?
[Java] public void keyTyped(KeyEvent arg0) {
tname.setText("");
String search = tplz.getText();
for(int i = 0; i < datenliste.size(); i++)
if(datenliste.get(i).startsWith(search))
tname.append(datenliste.get(i)+"\n");[/code]

Zum anderen möchte ich die ArrayList gerne automatisch beim Starten aus einer Datei auslesen, wie mache ich das?

Hier noch der ganze code:
Java:
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

public class alissa implements KeyListener {
	private JTextArea tplz, tname;
	private ArrayList<String> datenliste;
	private JFrame frame;
	
	public static void main(String args[]) {
		alissa start = new alissa();
		start.los();
	}
	public void los() {
		frame = new JFrame("Zuständigkeiten v0.01");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		tplz = new JTextArea(1,5);
		tname = new JTextArea(5, 20);
		tplz.addKeyListener(this);
		JButton ende = new JButton("ende");
		datenliste = new ArrayList<String>();
		JLabel tplzlabel = new JLabel("PLZ");
		JLabel tnamelabel = new JLabel("Zuständig:");
		panel1.add(tplzlabel);
		panel1.add(tplz);
		panel2.setLayout(new BorderLayout());
		panel2.add(BorderLayout.NORTH, tnamelabel);
		panel2.add(BorderLayout.CENTER, tname);
		panel2.add(BorderLayout.SOUTH, ende);
		ende.addActionListener(new EndeListener());
		frame.getContentPane().add(BorderLayout.NORTH, panel1);
		frame.getContentPane().add(BorderLayout.SOUTH, panel2);
		frame.setSize(200,175);
		frame.setVisible(true);
		
		datenliste.add("79100: subn0de");
		datenliste.add("667: Neighbour of the Beast");
		datenliste.add("78900: Frau Frauke");
		datenliste.add("1050: Zensursula");
		datenliste.add("0815: Herr Herbert");
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		tname.setText("");
		String search = tplz.getText();
	    for(int i = 0; i < datenliste.size(); i++)
	    	  if(datenliste.get(i).startsWith(search))
	    		 tname.append(datenliste.get(i)+"\n");
		
	}
	public class EndeListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub

			
		}
	}

}
 

nrg

Top Contributor
Zwei Probleme habe ich noch:
Zum einen werden die Ergebnisse nicht richtig angezeigt - wenn ich 79 eingebe, erscheint auch 78, allerdings weiss ich nicht woran das liegen könnte?
[Java] public void keyTyped(KeyEvent arg0) {
tname.setText("");
String search = tplz.getText();
for(int i = 0; i < datenliste.size(); i++)
if(datenliste.get(i).startsWith(search))
tname.append(datenliste.get(i)+"\n");[/code]
das muss in keyReleased

Zum anderen möchte ich die ArrayList gerne automatisch beim Starten aus einer Datei auslesen, wie mache ich das?
wie schonmal gesagt: dein Objekt einfach serialisieren und beim starten deserialisieren.
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.12 Persistente Objekte und Serialisierung

dann aber mit ClosingListener:
Java:
frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            //hier ArrayList serialisieren
        }
    });

private JTextArea tplz;
Warum TextArea? Reicht dir dafür kein Textfeld?
 
Zuletzt bearbeitet:

subn0de

Mitglied
Ich lese jetzt eine Datei ein und serialisiere die Datensätze dabei gleich:
Java:
private void dateiLaden(File datei) {
	datenliste = new ArrayList<String>();
	try {
		BufferedReader reader = new BufferedReader(new FileReader(datei));
		String zeile = null;
		while ((zeile = reader.readLine()) != null) {
			addData(zeile);
		}
		try {
			ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("datensatz.dat"));
			for(int i = 0; i < datenliste.size(); i++)
				os.writeObject(i);
			os.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		
		reader.close();
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	
}

Jetzt weiss ich aber nicht wie ich sie wieder einlesen kann. Alle Beispiele die ich finde, deklarieren die Datensätze einzeln - bei einer Menge von ~40k ist das aber nicht realisierbar. Ich habe es probiert mit
Java:
		try {
			ObjectInputStream is = new ObjectInputStream(new FileInputStream("datensatz.dat"));
			for(int i = 0; i < datenliste.size(); i++)
				is.readObject();
			is.close();			
		} catch (IOException ex) {
			ex.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
aber das kann ja garnicht funktionieren, da die ArrayList datenliste ja erst gefüllt werden muss :-/
 
Zuletzt bearbeitet:

subn0de

Mitglied
Wenn ich versuche mit
Java:
	try {
		ObjectInputStream is = new ObjectInputStream(new FileInputStream("datensatz.dat"));
		ArrayList<String> datenliste = (ArrayList<String>)is.readObject();
		is.close();
	} catch (IOException ex) {
		ex.printStackTrace();
	} catch(ClassNotFoundException ex){
		ex.printStackTrace();
	}
zu deserialisieren meldet eclipse:
Multiple markers at this line
- Type safety: Unchecked cast from Object to
ArrayList<String>
- The local variable datenliste is never read

Hier mal der ganze Code:
Java:
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class Einlesen implements KeyListener {
	private JTextArea tplz, tname;
	private ArrayList<String> datenliste;
	private JFrame frame;
	
	public static void main(String args[]) {
		Einlesen start = new Einlesen();
		start.los();
	}
	public void los() {
		frame = new JFrame("plzFindME 0.04a");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		tplz = new JTextArea(1,5);
		tname = new JTextArea(3, 20);
		tplz.addKeyListener(this);
		JButton ende = new JButton("ende");
		JButton laden = new JButton("laden");
		datenliste = new ArrayList<String>();
		JLabel tplzlabel = new JLabel("PLZ");
		JLabel tnamelabel = new JLabel("Zuständig:");
		panel1.add(tplzlabel);
		panel1.add(tplz);
		panel2.setLayout(new BorderLayout());
		panel2.add(BorderLayout.NORTH, tnamelabel);
		panel2.add(BorderLayout.CENTER, tname);
		panel2.add(BorderLayout.SOUTH, ende);
		panel2.add(BorderLayout.SOUTH, laden);
		laden.addActionListener(new LadenListener());
		ende.addActionListener(new EndeListener());
		frame.getContentPane().add(BorderLayout.NORTH, panel1);
		frame.getContentPane().add(BorderLayout.SOUTH, panel2);
		frame.setSize(200,150);
		frame.setVisible(true);
		
		try {
			ObjectInputStream is = new ObjectInputStream(new FileInputStream("datensatz.dat"));
			ArrayList<String> datenliste = (ArrayList<String>)is.readObject();
			is.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		} catch(ClassNotFoundException ex){
			ex.printStackTrace();
		}
			

}


@Override
public void keyPressed(KeyEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void keyReleased(KeyEvent arg0) {
	// TODO Auto-generated method stub
	tname.setText("");
	String search = tplz.getText();
    for(int i = 0; i < datenliste.size(); i++)
    	  if(datenliste.get(i).startsWith(search))
    		 tname.append(datenliste.get(i)+"\n");
	
}

@Override
public void keyTyped(KeyEvent arg0) {
	// TODO Auto-generated method stub

	
}
public class EndeListener implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		System.exit(0);
	
		
	}

}
public class LadenListener implements ActionListener {
	public void actionPerformed(ActionEvent e) {
		JFileChooser dateiÖffnen = new JFileChooser();
		dateiÖffnen.showOpenDialog(frame);
		dateiLaden(dateiÖffnen.getSelectedFile());
		
		
	}
}
private void dateiLaden(File datei) {
	datenliste = new ArrayList<String>();
	try {
		BufferedReader reader = new BufferedReader(new FileReader(datei));
		String zeile = null;
		while ((zeile = reader.readLine()) != null) {
			addData(zeile);
		}
		try {
			ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("datensatz.dat"));
			for(int i = 0; i < datenliste.size(); i++)
				os.writeObject(i);
			os.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		
		reader.close();
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	try {
		ObjectInputStream is = new ObjectInputStream(new FileInputStream("datensatz.dat"));
		ArrayList<String> datenliste = (ArrayList<String>)is.readObject();
		is.close();
	} catch (IOException ex) {
		ex.printStackTrace();
	} catch(ClassNotFoundException ex){
		ex.printStackTrace();
	}
	
}
private void addData(String zeile) {
	datenliste.add(zeile);
}

}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Supersimple Frage Java Basics - Anfänger-Themen 3
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
E Datenbank Spalte zusammenzählen Java Basics - Anfänger-Themen 2
R Datenbank Java Basics - Anfänger-Themen 1
I API Key´s in der Datenbank decrypt / encrypten? Java Basics - Anfänger-Themen 23
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
M Von der Datenbank zum Textfield Java Basics - Anfänger-Themen 16
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Verschiede Aktionen der Datenbank getrennt durchführen Java Basics - Anfänger-Themen 4
DaCrazyJavaExpert Datenbank wird nicht erstellt Java Basics - Anfänger-Themen 31
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
B Schreiben von zu vielen Einträgen in einer Datenbank Java Basics - Anfänger-Themen 9
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
N Datenbank mit GUI verbinden - Wie? Java Basics - Anfänger-Themen 5
1 Datenbank in Java Java Basics - Anfänger-Themen 1
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
J Bücher Datenbank Java Basics - Anfänger-Themen 5
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
R Erstversuch Datenbank Java Basics - Anfänger-Themen 6
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
T Sql Datenbank - variable übergeben? Java Basics - Anfänger-Themen 8
C Passwörter möglichst sicher in Datenbank speichern Java Basics - Anfänger-Themen 18
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
J GUI mit phpMyAdmin Datenbank verbinden Java Basics - Anfänger-Themen 0
K Erste Schritte Datenbank SQL erklärung Java Basics - Anfänger-Themen 15
B Lokale Datenbank Java Java Basics - Anfänger-Themen 2
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
U Datenbank in Java Java Basics - Anfänger-Themen 8
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
B Dateiname in Datenbank schreiben Java Basics - Anfänger-Themen 2
J fortlaufende Objekte durch Variable auswählen; Datenbank Java Basics - Anfänger-Themen 4
S ArrayList in mysql Datenbank speichern Java Basics - Anfänger-Themen 6
C Datenbank - Welche Java Basics - Anfänger-Themen 5
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
J Erste Schritte Objekte in Datenbank speichern Java Basics - Anfänger-Themen 26
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
L Erste Schritte Datenbank Zugangsdaten sicher? Java Basics - Anfänger-Themen 15
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
K Input/Output Datenbank Java Basics - Anfänger-Themen 27
M Datenbank in die Gui Java Basics - Anfänger-Themen 4
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
F Erfassung von PCs in eine SQLite-Datenbank über JDBC Java Basics - Anfänger-Themen 9
T Datenbank Abfrage Exception Null Java Basics - Anfänger-Themen 2
M Brauche ich ein Datenbank oder nicht? Java Basics - Anfänger-Themen 6
D JDBC Datenbank fail?! Java Basics - Anfänger-Themen 20
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
F Classpath Datenbank ... nur wo? Java Basics - Anfänger-Themen 24
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
B Personalnummer aus Datenbank Java Basics - Anfänger-Themen 3
M Welche Datenbank? Java Basics - Anfänger-Themen 5
J RadioButtonInhalt in Datenbank übergeben Java Basics - Anfänger-Themen 3
R Datenbank bei Klassenverteilung führt zu NullPointerException Java Basics - Anfänger-Themen 7
J PW von Datenbank wie abspeichern? Java Basics - Anfänger-Themen 2
F Verbindung zu MySql Datenbank Java Basics - Anfänger-Themen 4
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
F Collections Datenbankdaten in einer Map speichern, bearbeiten, sortieren und wieder in Datenbank schreiben Java Basics - Anfänger-Themen 20
T Zugangsdaten für Datenbank in Java-Programm speichern? Java Basics - Anfänger-Themen 5
S Schnittstelle für Datenbank bzw. Dateiformat Java Basics - Anfänger-Themen 2
C ComboBoxModel mit Daten der Datenbank verändern Java Basics - Anfänger-Themen 2
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben