Deutsche Dokumentation - ATokS

Werbung
JSDatаBase
(JAVA SIMPLE DATA BASE V.1.0)
Vorwort
Diese Bibliothek ist ein mit JAVA (JavaSE-1.6) realisiertes Datenbanksystem für die Speicherung und
die Verwaltung von Daten. Sehr oft schreibt man Programme, die die Daten ablegen oder bereitstellen
sollen und nicht nur ein paar Sätze, sondern auch riesige Datenmengen, wie zum Beispiel ein
Telefonbuch.
Ich selbst habe schon mehrere Male Probleme gehabt, welche man einfach ohne die Datenbank nicht
realisieren kann, z.B.: NotenBank v 1.0 unter der Adresse
(http://atoks.bplaced.net/index.php?action=soft&top=7&lang=de) und mehrere andere.
Manche werden sich bestimmt fragen „Wozu noch mal ein Fahrrad entdecken? Es gibt schon Haufen von
Datenbanken, die bereits geschrieben sind, um diese Probleme zu lösen.“ Und ich bin damit
einverstanden. Aber ich hatte eine Situation, in der eine Datenbank benutzt werden sollte, welche
gewisse Ähnlichkeiten zu MySQL hat, aber keine Server dazu braucht. Deswegen habe ich mich mit
diesem Problem auseinander gesetzt und diese Datenbank geschrieben, die das Ablegen großer Mengen
von Daten in eine Datei und auch deren Nutzung von dort aus ermöglicht. Dazu ist es komplett
KOSTENLOS und ist zu einer ganz guten Sache geworden.
Ich habe diese Datenbank schon in drei Projekten benutzt und habe noch keine Probleme entdeckt, läuft
einwandfrei. Deswegen möchte ich diese Datenbank mit anderen teilen, vielleicht findet es jemand
hilfreich.
Vorteile, die ich rausgefunden habe ☺
+ ERSTE UND GROESSTE KOSTENLOS
+ Funktioniert lokal auf dem Rechner
+ Braucht keine zusätzlichen Installationen, vor welchen meistens die User „Angst“ haben
+ Sehr einfach zu bedienen
+ Nimmt wenig Speicherplatz weg
+ Ziemlich schnell bei 1000000 Datensätzen; fast genau so schnell wie MySQL
+ Auf Grund das diese Datenbank komplett unter JAVA geschrieben ist, soll es plattformunabhängig
sein, aber ich habe es nur unter Windows getestet.
+ es gibt eine Deutsche Dokumentation
Beschreibung
(Stand-Alone-Database) Datenbank für Speicherung und Verwaltung von Daten auf lokalen Maschinen.
Aber mittels Output und Input Flüssen man kann diese auch im Netzwerk versuchen.
besteht aus zwei Klassen: JSDataBase und JSDataTable. Beide Klassen können von
allein benutzt werden. Das heißt JSDataTable kann als selbstständige Klasse dienen.
JSDatаBase
und JSDataTable sind auf Hashtable und Vector aufgebaut. Wegen der Benutzung
von Generics in JSDataBase ist diese Datenbank ab JAVA-Version 5 funktionsfähig.
JSDataBase
Hilfsklassen:
import
import
import
import
import
import
import
import
import
import
import
import
import
import
java.io.File;
java.io.FileInputStream;
java.io.FileNotFoundException;
java.io.FileOutputStream;
java.io.InputStream;
java.io.IOException;
java.io.ObjectInputStream;
java.io.ObjectOutputStream;
java.io.OutputStream;
java.io.Serializable;
java.util.Date;
java.util.Enumeration;
java.util.Hashtable;
java.util.Vector;
Inhalt des Klasses JSDataBase
1. Vector<String> getTableNames();
2. boolean createTable(String tab_name, String kopf);
3. boolean createTable(String tab_name, String kopf, String autoWert);
4. SJDatenTabelle getTable(String tab_name);
5. boolean renameTable(String alteName, String neueName);
6. boolean removeTable(String tab_name);
7. String[] getHeadOf(String tab_name);
8. boolean addColumnsInTo(String tab_name, String col);
9. boolean removeColumnsFrom(String tab_name, String col);
10. boolean renameColumnsFrom(String tab_name, String col);
11. boolean insertInTo(String tab_name, String ds);
12. Vector<String[]> selectFrom(String tab_name, String beschrenkung, String
bedingung);
13. Vector<String[]> updateOf(String tab_name, String set, String bedingung);
14. Vector<String[]> deleteFrom(String tab_name, String bedingung);
15. boolean saveTable(String tab_name, OutputStream os);
16. boolean saveTable(String tab_name, File file);
17. boolean loadTable(InputStream is, boolean replace);
18. boolean loadTable(File file, boolean replace);
19. boolean save(OutputStream os) ;
20. boolean save(File file);
21. boolean load(InputStream is);
22. boolean load(File file);
23. String sqlDump();
1) getTableNames();
Diese Funktion gibt ein Vector<String> mit allen Tabellennamen, die bereits in der Datenbank
vorhanden sind, zurück. Wenn getTableNames().size() == 0 ist, dann ist die Datenbank leer, keine
Tabellen sind angelegt.
2) createTable(String tab_name, String kopf);
Diese Funktion legt eine Tabelle mit Namen aus Parameter tab_name und Tabellenkopf aus Parameter
kopf an. Wenn die Funktion true zurückgibt, dann wurde die Tabelle erfolgreich angelegt. Wenn false
erscheint, dann heißt es, dass die Tabelle nicht angelegt wurde. Mögliche Ursachen: Syntaktische Fehler
oder es existieren bereits Tabellen mit gewünschtem Namen in der Datenbank.
Beispiel:
JSDataBase db = new JSDataBase();
db.createTable("Test", "ID, Name");
In diesem Fahl wird folgende Tabellenstruktur angelegt.
Test
ID
Name
3) createTable(String tab_name, String kopf, String autoWert);
Diese Funktion funktioniert nach gleichem Prinzip wie createTable(String tab_name, String
kopf); aber mit einem Unterschied: es wird sofort ein autoWert vorbestimmt. Diese Zahl kann zum
Beispiel als Primary Key benutzt werden, die Spalte, die als AutoWer bezeichnet wird, speichert den
Index von jedem Datensatz. Dieser Index ist eineindeutig. Parameter autoWert zeigt, welche Spalte
als Zähler funktionieren muss.
Beispiel:
JSDataBase db = new JSDataBase();
db.createTable("User", "ID, Name, Adresse", "ID");
In diesem Fahl wird folgende Tabellenstruktur angelegt, wo ID als Zähler vordefiniert wird.
Inhalt von dieser Spalte ist unveränderbar.
ID
User
Name
Adresse
4) getTable(String tab_name);
Diese Funktion gibt eine Tabelle JSDataTable mit dem Namen, welcher im Parameter tab_name
übergegeben wird, zurück oder null im Fall, wenn die Tabelle mit diesem Name nicht existiert.
5) renameTable(String alteName, String neueName);
Diese Funktion benennt die Tabelle mit dem Namen alteName in einen neuen Namen neueName
um.
Im Fall, wenn die Methode true zurückliefert, wurde die Tabelle erfolgreich umbenannt. Wenn false
zurückgegeben wird, wurde die Tabelle nicht umbenannt. Mögliche Ursachen: Die Tabelle mit dem
Namen alteName existiert in der Datenbank nicht oder der neue Name neueName ist bereits
vorgeben.
6) removeTable(String tab_name);
Diese Methode entfernt die Tabelle mit dem Name tab_name aus der Datenbank.
Die Funktion liefert ein true zurück, wenn die Tabelle erfolgreich gelöscht wurde; falls false
zurückgegeben wird, wurde die Tabelle nicht gelöscht. Das heißt die Tabelle mit dem Namen
tab_name existiert in der Datenbank nicht.
7) getHeadOf(String tab_name);
Diese Methode liefert ein Feld String[] mit Tabellenkopf von Tabelle mit Name tab_name.
Oder null , wenn die Tabelle mit diesem Name in der Datenbank nicht existiert.
8) addColumnsInTo(String tab_name, String col);
Die Funktion fügt neue Spalten mit Defaultinhalt, welche im Parameter col übergeben werden, in die
Tabelle mit dem Namen tab_name ein.
Solch eine Methode liefert true zurück, wenn alle Spalten erfolgreich eingefügt worden sind oder false,
wenn die Spalten nicht zugefügt wurden. Mögliche Ursachen: Die Tabelle mit dem Name tab_name
existiert in der Datenbank nicht oder es stimmt die Syntax von col nicht. Es könnte auch sein, dass eine
von den gewünschten Spalten bereits in der Tabelle existiert.
Beispiel:
JSDataBase db = new JSDataBase();
db.createTable("User", "ID, Name, Adresse", "ID");
// Fügen Sie eine neue Spalte Sex mit Default Inhalt Mann
// und Spalte Age mit leerem Inhalt ein
db.addColumnsInTo("User", "Sex='Mann', Age=''");
Am Anfang wird folgende Tabellenstruktur angelegt:
User
Name
ID
Adresse
Dann wird die Tabelle um zwei Spalten vergrößert.
ID
Name
User
Adresse
Sex
Age
Im Fall, wenn die Tabelle vor der Erweiterung schon mit Inhalt gefüllt wurde, werden dann die Spalten
Sex mit dem Inhalt Mann und Age mit leerem Inhalt in der Tabelle gespeichert. Wie im folgenden
Beispiel:
Tabellenansicht vor der Erweiterung:
User
Name
Müller
Mayer
ID
1
2
Adresse
Musterstadt
Berlin
Tabellenansicht nach der Erweiterung:
ID
1
2
Name
Müller
Mayer
User
Adresse
Musterstadt
Berlin
Sex
Mann
Mann
Age
ACHTUNG
Das folgende Beispiel enthält syntaktische Fehler!
db.addColumnsInTo("User", "Sex, Age");
Neue Spalten müssen immer mit Default Inhalt vorgesehen werden. Um das obere Beispiel richtig zu
schreiben, muss es folgendermaßen aussehen:
db.addColumnsInTo("User", "Sex='', Age=''" );
9) removeColumnsFrom(String tab_name, String col);
Die Methode löscht Spalten mit den Namen; die werden im Parameter col aus Tabelle mit Name
tab_name übergeben.
Es wird true zurückgeliefert, wenn alles erfolgreich abgearbeitet wurde oder false, wenn Fehler
aufgetreten sind. Mögliche Ursachen: Tabelle mit dem Name tab_name existiert in der Datenbank
nicht. Entweder enthält col syntaktischer Fehler, oder eine von den gewünschten Spalten existiert nicht,
oder Sie versuchen alle Spalten aus der Tabelle zu löschen (eine Tabelle ohne Spalten ist keine Tabelle).
Beispiel:
JSDataBase db = new JSDataBase();
db.createTable("User", "ID, Name, Adresse", "ID");
db.addColumnsInTo("User", "Sex='Mann', Age=''");
// Löschen von Spalten ID und Sex
db.removeColumnsFrom("User", "ID, Sex");
Tabelle vor der Entfernung
ID
1
2
Name
Müller
Mayer
User
Adresse
Musterstadt
Berlin
Tabelle nach der Entfernung
Name
Müller
Mayer
User
Adresse
Musterstadt
Berlin
Age
Sex
Mann
Mann
Age
10) renameColumnsFrom(String tab_name, String col);
Die Methode benennt Spalten, die in Parameter col eingegeben werden, um. Parameter tab_name
zeigt, in welche Tabelle die Spalten umbenannt worden.
True wird zurückgegeben, wenn die gewünschten Spalten erfolgreich umbenannt worden sind, ansonsten
erscheint false. Mögliche Ursachen: Tabelle mit Name tab_name existiert in der Datenbank nicht oder
col enthält syntaktischer Fehler. Es kann sein, dass eine von den gewünschten Spalten nicht existiert
oder einer von den neuen Namen bereits vorgegeben ist.
Beispiel:
JSDataBase db = new JSDataBase();
db.createTable("User", "ID, Name, Adresse", "ID");
db.addColumnsInTo("User", "Sex='Man', Age=''");
db.removeColumnsFrom("User", "ID, Sex");
// Umbenennen von Spalten Adresse und Age in Home und Born
db.renameColumnsFrom("User", "Adresse='Home', Age='Born'");
Tabelle vor dem Umbenennen:
Name
User
Adresse
Age
Tabelle nach dem Umbenennen:
User
Name
Home
Born
11) insertInTo(String tab_name, String ds);
Diese Funktion fügt eine neue Zeile ds in die Tabelle mit dem Namen tab_name ein.
True erscheint, wenn die Zeile erfolgreich hinzugefügt wurde. False wird zurückgegeben, wenn diese
nicht hinzugefügt worden ist.
Regeln zum Hinzufügen von einer Zeile
Man nehme an, dass eine Tabelle mit folgender Struktur vorhanden ist:
User
Name
Home
Born
Damit man eine neue Zeile einfügen kann, ist es erforderlich, in den Parameter ds folgendes
hinzuschreiben:
(Spaltenname = 'Inhalt') Wenn Sie Inhalte in mehrere Zeilen einfügen wollen, dann müssen Sie auch
diese durch ein Komma abtrennen, wie bei diesem Beispiel: (Spaltenname1 = 'Inhalt1', Spaltenname2 =
'Inhalt2', usw. ) Dabei ist es unwichtig, die Reihenfolge der Zeilen einzuhalten, denn die Inhalte werden
nach dem Namen der Spalte geordnet. Der Inhalt muss immer vom Symbol ' eingerahmt werden. Ein
Gleichheitszeichen vor dem Spaltnamen sagt aus, dass die folgenden Inhalte in diese Spalte
reingeschrieben werden sollen.
Beispiel:
Wir fügen Inhalte in die oben vorgegebene Tabelle ein.
JSDataBase db = new JSDataBase();
db.createTable("User", "ID, Name, Adresse", "ID");
db.addColumnsInTo("User", "Sex='Man', Age=''");
db.removeColumnsFrom("User", "ID, Sex");
db.renameColumnsFrom("User", "Adresse='Home', Age='Born'");
// Inhalte einfügen
db.insertInTo("User", "Name='Smith', Born='12.09.1981', Home='USA'");
Nach dem Einfügen sieht die Tabelle folgendermaßen aus:
Name
Smith
User
Home
USA
Born
12.09.1981
Jetzt fügen wir Inhalte mit leeren Spalten ein.
// Einfügen von Inhalten mit leeren Spalten
db.insertInTo("User", " Home='Berlin', Name='Mayer'");
Ergebnis:
Name
Smith
Berlin
User
Home
USA
Mayer
Born
12.09.1981
ACHTUNG
Zur Benutzung des vorreservierten Symbols ' in Inhalten bitte \\ eingeben. Ein Beispiel ist der folgende
Text:
I’m Smith
Bei Eingeben in die Datenbank soll dieser Satz so aussehen:
I\\’m Smith
12) selectFrom(String tab_name, String beschrenkung, String bedingung);
Die Funktion zieht Inhalte aus Tabellen mit den Namen tab_name bei bestimmten Bedingungen im
Parameter bedingung heraus. Es wird Vector<String[]> mit dem Inhalt, der mit dem Parameter
beschrenkung eingeschränkt ist, zurückgegeben; diese Beschränkung entspricht den Bedingungen
beim Parameter bedingung.
Da diese Base SIMLPE heißt, zählt zu ihrer Grenze der logische Operator AND, welcher hier als ein
Komma vorgestellt wird. Alle anderen Operatoren fehlen, da in den meisten Fällen nur AND ausreicht.
Das Nutzen von Operatoren * ist erlaubt, hier und überall steht der Operator für ALLES, d.h. wenn Sie
alles aus der Tabelle rausziehen wollen, schreiben Sie folgendes:
Vector<String[]> content = db.selectFrom("User", "*", "*");
Inhalte, die in Variable content gespeichert sind, werden eine andere Struktur der Überschrift
besitzen, wie es bei Punkt 7) getHeadOf(String tab_name); beschrieben steht.
Zum Beispiel die folgende Tabelle:
Name
Smith
Mayer
User
Home
USA
Berlin
Born
12.09.1981
Ausruf der Funktion getHeadOf("User") bringt dieses Massiv zurück:
String[]{ "Name" , "Home" , "Born" };
Davon ausgehend, werden alle Massive in der Variable content die Inhalte derselben Struktur
besitzen. Zum Beispiel:
String[]{ "Smith" , "USA" , "12.09.1981" };
String[]{ "Mayer" , "Berlin" , "" };
Wenn nur das Löschen von Namen nötig ist, dann löschen wir einfach die Inhalte aus Massiven mit dem
Index, der mit dem Index "Name" im Tabellenkopf übereinstimmt.
Damit man das überflüssige Überarbeiten von Informationen vermeidet, kann man beim Erlagen der
Inhalte aus der Tabelle, mithilfe der Funktion 12) selectFrom(…)beim Parameter beschrenkung
die Beschränkungen eingeben, die die Ordnung der Struktur der Inhalte von Massiven ermöglichen.
Genauso kann man eingeben, welche Spalten gefunden werden sollen und welche nicht. Es ist sogar das
mehrfache Zurückkehren einer Spalte möglich.
Ein Beispiel zur selben Tabelle:
Vector<String[]> content = db.selectFrom("User", "Home, Name, Home", "*");
Hier ist es absichtlich, dass bei der Beschränkung die Spalten in einer anderen Reihenfolge wie die
Überschrift der Tabelle eingeben sind und die Spalte Home ist zwei Mal angegeben.
Nach dem Ausruf dieser Funktion, werden alle Massive in der Variable content über den Inhalt mit
dieser Struktur "Home, Name, Home" verfügen.
String[]{ "USA" , "Smith" , "USA" };
String[]{ "Berlin" , "Mayer" , "Berlin" };
Jetzt kann man über alle Massive drübergehen und die nötige Information auswählen.
Aber auch das kann man sich ersparen, wenn man beim Ausruf der Funktion 12) selectFrom(…)
beim Parameter bedingung die Bedingung angibt, die die Suche der Inhalte einschränkt.
Ein Beispiel für dieselbe Tabelle:
Vector<String[]> content = db.selectFrom("User", "Born, Name, Home", "Born=''");
Nach dem Ausruf dieser Funktion, werden alle Massive in der Variable content die Inhalte mit
folgender Struktur ausweisen:
String[]{ "" , "Mayer" , "Berlin" };
13) updateOf(String tab_name, String set, String bedingung);
Diese Funktion erneuert die Inhalte in der Tabelle mit dem Namen tab_name bei bestimmten
Bedingungen, die im Parameter bedingung festgelegt sind. Der Operator * ist zugelassen.
Beispiel:
Die Tabelle vor der Erneuerung
Name
Smith
Mayer
User
Home
USA
Berlin
Born
12.09.1981
db.updateOf("User", "Born='29.02.1978'", "Born=''");
Nach dem Ausruf dieser Funktion erhalten die Schriften, bei denen die Spalte Born leer ist,
'29.02.1978'.
Die Tabelle nach der Erneuerung
Name
Smith
Mayer
User
Home
USA
Belin
Born
12.09.1981
29.02.1978
14) deleteFrom(String tab_name, String bedingung);
Diese Funktion löscht Inhalte aus der Tabelle mit dem Namen tab_name unter bestimmten
Bedingungen, die beim Parameter bedingung festgelegt sind. Der Operator * ist zugelassen.
Die Funktion gibt Vector<String[]> mit gelöschten Inhalten zurück. In dem Fall, wenn der Vektor
Null beträgt, dann heißt es, dass das Löschen nicht gelungen ist.
Der Syntax des Parameters bedingung ist genauso wie bei der Funktion 12)
selectFrom(...); .
Beispiel:
Name
Smith
Mayer
User
Home
USA
Berlin
Born
12.09.1981
29.02.1978
db.deleteFrom("User", "Name='Smith'");
Die Tabelle nach dem Löschen
Name
Mayer
User
Home
Berlin
Born
29.02.1978
14)-22) save / load Methoden
Mithilfe dieser Funktionen werden das Speichern und das Laden der Datenbank in eine Datei ermöglicht. Die
Funktionen, die der Speicherung und dem Laden bestimmter Tabellen dienen, benötigen den Befehl des Namens
der Tabelle oder den Befehl, dass man die Tabelle in der Datenbank überschreiben kann, wenn schon eine
Tabelle mit gleichem Namen existiert.
tab_name = Name der Tabelle, die gespeichert werden soll
replace = Flagge, die kennzeichnet, ob die bereits existierende Tabelle überschreiben werden soll
22) sqlDump();
Diese Funktion gibt String , der SQL-Dump enthält, vollkommen der Datenbank zurück.
Dieses Ergebnis kann man kopieren und man kann es zum Beispiel in phpmyadmin zur Generation/ zum
Kopieren der Datenbank einfügen.
Beispiel zur oberen Tabelle
-----
JSDataBase SQL Dump
Author: Aleksej Tokarev
Dump date: Sun Feb 20 09:13:27 CET 2011
JSDataBase vesion 1.0
--- Table struct for `User`
-CREATE TABLE IF NOT EXISTS `User` (
`Name` TEXT DEFAULT NULL,
`Home` TEXT DEFAULT NULL,
`Born` TEXT DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
INSERT INTO `User` (`Name`,`Home`,`Born`)
VALUES
('Mayer','Berlin','29.02.1978');
Zusätzlich
Damit Sie zusätzliche Informationen von der Tabelle bekommen, nutzen Sie die Funktion 4)
getTable(String tab_name);
Anzahl der Inhalte in der Tabelle
getTable(String tab_name).getRecordsCount(); // Integer
Name der Spalte, die wie ein Zähler arbeitet
getTable(String tab_name).get_auto_increment(); // String
Der aktuelle Zähler
getTable(String tab_name).get_increment(); // Integer
Nun habe ich alles beschrieben, was ich in meine Dokumentation einbauen wollte. Sie können sie gern
nutzen. Falls Fragen auftreten, Sie Kommentare abgeben wollen oder neue Vorschläge auftauchen,
wenden Sie sich bitte durch formelles Kontaktieren auf meiner Seite an mich.
http://atoks.bplaced.net/index.php?action=contact
Herunterladen