Vorbereitung:
Java sollte mit JDK und eventuell eine IDE (z.B.
Eclipse oder
Netbeans) installiert sein.
OpenOffice Base natürlich auch, da man damit die Datenbank erstellen wird :-). Damit man mit der Datenbank kommunizieren kann, braucht man die Bibliothek für die HSQL Database Engine, die man
hier herunterladen kann.
Die zip-Datei wie gewohnt entpacken. Vom entpackten Ordner aus hangelt man sich bis zu einem
lib-Ordner durch, in dem eine Datei namens
hsqldb.jar liegt. Diese muss später in einem Eclipse / Netbeans Projekt als zusätzliche Bibliothek hinzugefügt werden. (
Netbeans: Projects → <Projektname> → Libraries → Rechtsklick → Add JAR/Folder)
Zum Test kann man sich mit OpenOffice Base eine Testdatenbank anlegen, die eine Tabelle mit ein paar Spalten beinhaltet. Meine Datenbank heißt
Beispieldb.odb, hat eine Tabelle namens
Personen, in der folgende Spalten enthalten sind:
ID,
Vorname,
Nachname,
Geburtstag.
Die Datenbank für Java nutzbar machen:
Eine direkte Verbindung zu einer odb-Datenbank ist nicht möglich, aber man kann die in der odb-Datei eingebettete Datenbank heraus holen. OpenOffice Base Datenbanken sind im Grunde verkappte zip-Archive, die sich mit jedem Entpackprogramm (z.B. 7-Zip, Izarc, etc.) öffnen sowie entpacken lassen sollten.
[img]http://www.programmiersprachen.de/forum/index.php?page=Attachment&attachmentID=75&h=fe3f923efe79c69288293993311afd89aeca845a[/img]
In diesem Sammelsurium ist der
database-Ordner der wichtigste Inhalt. Er enthält die Dateien für die HSQL Datenbank:
backup
Dient zur Sicherung der Datenbankinhalte
data
Inhalte der Datenbanktabellen
properties
Einstellungen für die HSQL Datenbank Engine
script
Beschreibt die Tabellen sowie deren Spalten
Weitere Informationen zu HSQL entnimmt man am besten dem
HyperSQL User Guide.
Allerdings reicht das bloße Entpacken der Datenbank nicht aus. Man muss vor die Dateien ein Präfix setzen z.B. für
data:
Beispieldb.data . Andernfalls kommt es zu Problemen wie nicht gefundenen Tabellen, was Java dann mit einer
SQLException quittiert.
Ist die Datenbank derartig vorbereitet, wird klar, dass man nun nicht mehr zur selben Zeit mit OpenOffice Base auf der Datenbank arbeiten kann.
Verbindung herstellen:
Für das nachfolgende Beispielprogramm ist der Ausgangspunkt eine simple Klasse mit einer main-Methode. Vorher muss noch java.sql.* importiert werden, damit alles Nötige zum Handhaben der SQL Abfragen und der Datenbankverbindung bereit steht.
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public static void main(String[] args) {
System.out.println("Testverbindung zu HSQL DB");
Connection con = null;
try {
//1) Datenbanktreiber laden
Class.forName("org.hsqldb.jdbc.JDBCDriver");
//2)
con = DriverManager.getConnection("jdbc:hsqldb:file:/C:/Users/derUser/database/Beispieldb", "SA", "");
//3) Anfrage an Datenbank schicken
Statement stm = con.createStatement();
stm.execute("SELECT * FROM \"Personen\";");
//4)
printTable(stm);
//5) Verbindung beenden
stm.execute("SHUTDOWN");
con.close();
} catch (SQLException ex) {
System.out.println("SQLException");
} catch (ClassNotFoundException ex) {
System.out.println("Klasse wurde nicht gefunden!");
}
}
|
2) DriverManager.getConnection
Hier wird die Verbindung zur Datenbank aufgebaut. Als Parameter werden der Pfad zur Datenbank, Benutzername und Passwort mitgegeben. Die Pfadangaben haben unter Windows und Linux gleichbleibende Formen. Windows:
/C:/Users/derUser/database/Beispieldb Linux:
/home/deruser/database/Beispieldb
4) printTable
Mit dieser selbst geschriebenen Methode ist es möglich die Tabelleninhalte auszugeben.
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public static void printTable(Statement stm) throws SQLException {
//4a)
ResultSet res = stm.getResultSet();
//4b) Beinhaltet Informationen zu den zurück gelieferten Daten
ResultSetMetaData meta = res.getMetaData();
//4c) Maximalanzahl der Zeilen
int colmax = meta.getColumnCount();
Object o = null;
//4d)
while ( res.next() ) {
for (int i = 0; i < colmax; ++i) {
o = res.getObject(i + 1);
System.out.print(o.toString() + " ");
}
System.out.println(" ");
}
}
|
4a) ResultSet getResultSet
Holt die Daten, die durch die vorangegangene Abfrage erzeugt wurden, ab.
4d)
In der ersten Schleife werden die Spalten und danach die Zeilen der Tabelle durchlaufen. GetObject muss mit Werten beginnend bei 1 aufgerufen werden, daher die Schreibung i + 1.
Und zum Schluss:
Dieses kleine Tutorial ist wirklich nur ein winziger Ausschnitt aus dem, was man mit der Verbindung Java - Base-Datenbank machen könnte. Ich hoffe, dass es genügend Hilfestellung für den Anfang gegeben hat, sowie dass alles verständlich ist, was ich geschrieben habe.
Grüße
Cray