Seite 1 von 1

Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: Mi, 04.03.2009 15:38
von kaisemar
Hallo,

zwei Vorbemerkungen:
1) Ich sehe vermutlich den Wald vor lauter Baeumen nicht.
2) evtl. ist das auch das falsche Forum, dann bitte ich einen Admin, die Frage entsprechend zu verschieben.

Ich habe mit Java und den entsprechenden SQL-Befehlen eine HSQLDB-Datenbank erzeugt. Diese kann ich aus Java heraus auch ansprechen, die Inhalte ausgeben lassen, aendern, usw.
Hierzu muss ich ja auch einen Pfad inkl. Dateinamen angeben, unter der die HSQLDB-Datenbank-Datei abgelegt wird. Wenn ich mir den angegebenen Pfad jedoch anzeigen lasse, erscheint die Datei nicht. Es sind dort lediglich zwei Dateien, die zusaetzlich zum angegebenen Dateinamen noch die Endung .PROPERTIES und .SCRIPT haben (also bet test.odb ==> test.odb.PROPERTIES und test.odb.SCRIPT).
Ich wuerde mir nun aber gerne die Datenbank mit Hilfe von OOo Base ansehen.
a) Geht dies ueberhaupt?
b) Falls ja, wie?
Besten Dank,

Marcus

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: Mi, 04.03.2009 23:38
von hol.sten
kaisemar hat geschrieben:a) Geht dies ueberhaupt?
Ja
kaisemar hat geschrieben:b) Falls ja, wie?
Hier viewtopic.php?f=8&t=22088&hilit=MySQL habe ich mal beschrieben, was man tun muss, um mit OOo Base auf eine MySQL DB zuzugreifen. Analog, bei Einbinden der entsprechendenden HSQLDB-JAR-Datei mit dem HSQLDB-JDBC-Treiber müsste es auch mit HSQLDB funktionieren. Wenn nicht, sag wo es klemmt.

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: So, 08.03.2009 13:32
von kaisemar
hol.sten hat geschrieben:
kaisemar hat geschrieben:b) Falls ja, wie?
Hier viewtopic.php?f=8&t=22088&hilit=MySQL habe ich mal beschrieben, was man tun muss, um mit OOo Base auf eine MySQL DB zuzugreifen. Analog, bei Einbinden der entsprechendenden HSQLDB-JAR-Datei mit dem HSQLDB-JDBC-Treiber müsste es auch mit HSQLDB funktionieren. Wenn nicht, sag wo es klemmt.
Vielen herzlichen Dank, die Verbindung herzustellen klappt mit folgenden Anpassungen (schreibe das nur der Vollständigkeit halber, damit Leute mit ähnlichen Problemen auch weiterkommen):
1) Als Treiber musste ich natürlich in den Classpath den entsprechenden hsqldb-Treiber eintragen.
2) Bei "Verbindung zu einer bestehenden Datenbank einrichten" muss man anstatt "mySQL" den Eintrag "JDBC" in der zugehörigen Auswahlliste auswählt.
3) Dann wird man nach der Datenquellen-URL gefragt. Meine DB liegt lokal und und daher musste ich das folgende eintragen: jdbc:hsqldb:file:C:/Users/kaisemar/Documents/5PK_025percent.db
4) Die JDBC-Treiberklasse war die folgende: org.hsqldb.jdbcDriver

Nach dem Klick auf fertigstellen wurde ich nach dem Namen und Pfad der neuen DB gefragt [und das mag vielleicht auch der Grund für mein noch bestehendes Problem (siehe unten) sein]: Sobald ich diesen eingegeben habe, wurde mir in OOoBase die Tabellen der hsqldb-DB richtig angezeigt.

Das Problem, dass ich noch habe: Ich kann mir nun die in der hsqldb-DB abgelegten Werte ansehen (was schon mal ziemlich weitehilft), aber perfekt waere es, wenn ich sie auch noch aendern koennte... Kann mir hierzu noch jemand weiterhelfen?

Auf alle Faelle schon mal vielen Dank fuer die bisherige Hilfe, Marcus

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: So, 08.03.2009 14:41
von hol.sten
kaisemar hat geschrieben:Das Problem, dass ich noch habe: Ich kann mir nun die in der hsqldb-DB abgelegten Werte ansehen (was schon mal ziemlich weitehilft), aber perfekt waere es, wenn ich sie auch noch aendern koennte...
Frage: Haben deine Tabellen eine Primary Key? OOo lässt das Ändern von Tabelleninhalten nicht zu, wenn die Tabellen keinen primären Schlüssel haben.

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: So, 08.03.2009 18:31
von kaisemar
hol.sten hat geschrieben:
kaisemar hat geschrieben:Das Problem, dass ich noch habe: Ich kann mir nun die in der hsqldb-DB abgelegten Werte ansehen (was schon mal ziemlich weitehilft), aber perfekt waere es, wenn ich sie auch noch aendern koennte...
Frage: Haben deine Tabellen eine Primary Key? OOo lässt das Ändern von Tabelleninhalten nicht zu, wenn die Tabellen keinen primären Schlüssel haben.
Nein, vor Deinem Hinweis hatten die Tabellen keinen Primary Key. Habe daher den Quellcode, mit dem die Tabellen generiert werden, abgeändert zu (bspw.):
con.createStatement().execute("create table PCs(ID INTEGER, Rendite float(10), Risiko float(10), Liquidierbarkeit float(10), Variabilität float(10), Verwaltbarkeit float(10), Nachvollziehbarkeit float(10), PRIMARY KEY(ID))");
Eine andere Tabelle generiere ich mit:
con.createStatement().execute("create table covMatrix(ID int PRIMARY KEY, cov1 float(10), cov2 float(10), cov3 float(10), cov4 float(10), cov5 float(10), cov6 float(10),cov7 float(10), cov8 float(10), cov9 float(10), cov10 float(10))");

Beide Tabellen tun weiterhin ihren Zweck - lassen sich aber immer noch nicht in OOo Base bearbeiten... Sind die beiden PRIMARY KEY Definitionen falsch? Sollte eigetnlich der Spezifikation entsprechen...

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: So, 08.03.2009 19:22
von hol.sten
kaisemar hat geschrieben:Nein, vor Deinem Hinweis hatten die Tabellen keinen Primary Key. Habe daher den Quellcode, mit dem die Tabellen generiert werden, abgeändert ... Beide Tabellen tun weiterhin ihren Zweck - lassen sich aber immer noch nicht in OOo Base bearbeiten... Sind die beiden PRIMARY KEY Definitionen falsch? Sollte eigetnlich der Spezifikation entsprechen...
Ich habe mal eine OOo Base Datei angelegt und eine Tabelle Person mit vier Spalten erzeugt:
- ID
- Name
- Vorname
- Geburtsdatum
Wenn ich dann der Spalte ID einen Primärschlüssel spendiere, kann ich Tabelleninhalte erfassen und ändern.

Die OOo Base Datei habe ich dann gespeichert, mit dem Windows Explorer kopiert, umbenannte in MeineDB.zip und ausgepackt. Anschließend finde ich unter MeineDB\database u. a. folgendes in der Datei script:

Code: Alles auswählen

...
CREATE CACHED TABLE "Person"("ID" INTEGER NOT NULL PRIMARY KEY,"Name" VARCHAR(50),"Vorname" VARCHAR(50),"Geburtsdatum" DATE)
...
Im Vergleich zu deinem Create-Statement fallen mir zwei Unterschiede auf:
- Alle Namen (Tabelle, Spalte) sind in " und " eingeschlossen.
- Für die Primärschlüssel-Spalte ist zusätzlich NOT NULL definiert.

Wenn beide Änderungen immer noch nicht zum gewünschten Ergebnis führen, würde ich an deiner Stelle einfach auch mal eine eigene OOo Base Datei anlegen und darin eine der eigenen gewünschten Tabellen definieren und mit Primärschlüssel versehen. Dann schaust du dir die Tabellenstruktur gemäß meiner obigen Beschreibung etwas genauer an und versuchst das script nach zu programmieren.

Frage: Hast du mal versucht, nach deinen Änderungen an den Create-Statements eine neue OOo Base Datei anzulegen oder hast du immer mit der zuerst erstellten rumprobiert? Wenn das Ändern der Tabelleninhalte weiterhin nicht möglich ist, würde ich nach jeder Änderung der Create-Statements immer eine neue OOo Base Datei gemäß deines oben beschriebenen Vorgehens erstellen.

Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen

Verfasst: Mo, 09.03.2009 09:39
von kaisemar
hol.sten hat geschrieben:
kaisemar hat geschrieben:Nein, vor Deinem Hinweis hatten die Tabellen keinen Primary Key. Habe daher den Quellcode, mit dem die Tabellen generiert werden, abgeändert ... Beide Tabellen tun weiterhin ihren Zweck - lassen sich aber immer noch nicht in OOo Base bearbeiten... Sind die beiden PRIMARY KEY Definitionen falsch? Sollte eigetnlich der Spezifikation entsprechen...
Ich habe mal eine OOo Base Datei angelegt und eine Tabelle Person mit vier Spalten erzeugt:
- ID
- Name
- Vorname
- Geburtsdatum
Wenn ich dann der Spalte ID einen Primärschlüssel spendiere, kann ich Tabelleninhalte erfassen und ändern.

Die OOo Base Datei habe ich dann gespeichert, mit dem Windows Explorer kopiert, umbenannte in MeineDB.zip und ausgepackt. Anschließend finde ich unter MeineDB\database u. a. folgendes in der Datei script:

Code: Alles auswählen

...
CREATE CACHED TABLE "Person"("ID" INTEGER NOT NULL PRIMARY KEY,"Name" VARCHAR(50),"Vorname" VARCHAR(50),"Geburtsdatum" DATE)
...
Im Vergleich zu deinem Create-Statement fallen mir zwei Unterschiede auf:
- Alle Namen (Tabelle, Spalte) sind in " und " eingeschlossen.
- Für die Primärschlüssel-Spalte ist zusätzlich NOT NULL definiert.

Wenn beide Änderungen immer noch nicht zum gewünschten Ergebnis führen, würde ich an deiner Stelle einfach auch mal eine eigene OOo Base Datei anlegen und darin eine der eigenen gewünschten Tabellen definieren und mit Primärschlüssel versehen. Dann schaust du dir die Tabellenstruktur gemäß meiner obigen Beschreibung etwas genauer an und versuchst das script nach zu programmieren.
Habe das CREATE-Statement entsprechend angepasst, hat leider nichts gebracht. Danach hab ich noch Deinen Tip befolgt, und in OOo Base die entsprechende Tabelle angelegt und mir die Skript-Dateien angeschaut. Das CREATE-Statement für die Tabelle PCs (und auf die beschränke ich mich erst mal) ist 1:1 dasselbe, also vermute ich, dass es an den Anweisungen/Einstellungen drumherum liegt.

So sieht die mit OOo Base erzeugte Skript-Datei aus (farblich markiert sind die Unterschied zur unteren, aus Java erzeugten Skript-Datei):
SET DATABASE COLLATION "German"
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE CACHED TABLE "PCs"("ID" INTEGER NOT NULL PRIMARY KEY,"Rendite" FLOAT(10),"Risiko" FLOAT(10),"Liquidierbarkeit" FLOAT(10),"Variabilit\u00e4t" FLOAT(10),"Verwaltbarkeit" FLOAT(10),"Nachvollziehbarkeit" FLOAT(10))
SET TABLE "PCs" INDEX'32 0'
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 60

Zum Vergleich die mit Java erzeugte Skript-Datei:
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE CACHED TABLE "PCs"("ID" INTEGER NOT NULL PRIMARY KEY,"Rendite" FLOAT(10),"Risiko" FLOAT(10),"Liquidierbarkeit" FLOAT(10),"Variabilit\u00e4t" FLOAT(10),"Verwaltbarkeit" FLOAT(10),"Nachvollziehbarkeit" FLOAT(10))
CREATE MEMORY TABLE COVMATRIX(ID INTEGER NOT NULL PRIMARY KEY,COV1 FLOAT(10),COV2 FLOAT(10),COV3 FLOAT(10),COV4 FLOAT(10),COV5 FLOAT(10),COV6 FLOAT(10),COV7 FLOAT(10),COV8 FLOAT(10),COV9 FLOAT(10),COV10 FLOAT(10))
SET TABLE "PCs" INDEX'272 0'
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 10
SET SCHEMA PUBLIC
INSERT INTO COVMATRIX VALUES(1,0.405E0,0.0892E0,0.0025E0,0.0013E0,0.2313E0,0.2074E0,0.0E0,0.0109E0,0.0E0,0.0144E0)
INSERT INTO COVMATRIX VALUES(2,0.0892E0,0.0593E0,-0.0025E0,-0.0016E0,0.0959E0,0.103E0,0.0E0,0.0169E0,0.0E0,0.0055E0)
INSERT INTO COVMATRIX VALUES(3,0.0025E0,-0.0025E0,0.0013E0,0.0012E0,-0.0066E0,-0.0056E0,0.0E0,0.0028E0,0.0E0,0.0012E0)
INSERT INTO COVMATRIX VALUES(4,0.0013E0,-0.0016E0,0.0012E0,0.0013E0,-0.0043E0,-0.0036E0,0.0E0,0.0026E0,0.0E0,0.0010E0)
INSERT INTO COVMATRIX VALUES(5,0.2313E0,0.0959E0,-0.0066E0,-0.0043E0,0.2667E0,0.2397E0,0.0E0,0.0028E0,0.0E0,0.0023E0)
INSERT INTO COVMATRIX VALUES(6,0.2074E0,0.103E0,-0.0056E0,-0.0036E0,0.2397E0,0.2315E0,0.0E0,0.0139E0,0.0E0,0.0049E0)
INSERT INTO COVMATRIX VALUES(7,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0)
INSERT INTO COVMATRIX VALUES(8,0.0109E0,0.0169E0,0.0028E0,0.0026E0,0.0028E0,0.0139E0,0.0E0,0.0658E0,0.0E0,0.0127E0)
INSERT INTO COVMATRIX VALUES(9,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0)
INSERT INTO COVMATRIX VALUES(10,0.0144E0,0.0055E0,0.0012E0,0.0010E0,0.0023E0,0.0049E0,0.0E0,0.0127E0,0.0E0,0.0072E0)

Natürlich unterscheidet sich die untere Version noch durch die INSERT-Statements, aber die sollten keinen Unterschied machen.

Mache mich mal auf die Suche nach den entsprechenden unterschiedlichen Statements - wer hier aus dem Stegreif was weiss, bitte melden.
hol.sten hat geschrieben:Frage: Hast du mal versucht, nach deinen Änderungen an den Create-Statements eine neue OOo Base Datei anzulegen oder hast du immer mit der zuerst erstellten rumprobiert? Wenn das Ändern der Tabelleninhalte weiterhin nicht möglich ist, würde ich nach jeder Änderung der Create-Statements immer eine neue OOo Base Datei gemäß deines oben beschriebenen Vorgehens erstellen.
Nein, ich habe jedes Mal die alte DB geloescht und eine neue erzeugt, sowohl in Java als dann auch beim Anschauen mit OOo Base. Wobei hier eines seltsam ist: OpenOffice laeuft im Hintergrund weiter, auch wenn kein Fenster mehr offen ist. Dadurch sind auch die DB-Dateien nicht freigegeben und ich musste erst jedes Mal ueber den Taskmanager den Prozess beenden, um die DB-Dateien loeschen zu koennen...