You are not logged in.


Cray X-MP

Moderatorin

  • "Cray X-MP" started this thread

Posts: 681

Location: Rechenzentrum

Occupation: *

  • Send private message

1

Saturday, May 28th 2011, 7:01pm

Mit Java auf eine OpenOffice Base Datenbank zugreifen

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
Cray X-MP has attached the following image:
  • odb_Inhalte.JPG
Die Utopie von heute ist die Realität von morgen. (Ernst Bloch)

This post has been edited 1 times, last edit by "Cray X-MP" (Sep 9th 2011, 11:34pm)


Social bookmarks

Rate this thread