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
Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen
Moderator: Moderatoren
Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen
Jakaisemar hat geschrieben:a) Geht dies ueberhaupt?
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.kaisemar hat geschrieben:b) Falls ja, wie?
Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen
Vielen herzlichen Dank, die Verbindung herzustellen klappt mit folgenden Anpassungen (schreibe das nur der Vollständigkeit halber, damit Leute mit ähnlichen Problemen auch weiterkommen):hol.sten hat geschrieben: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.kaisemar hat geschrieben:b) Falls ja, wie?
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
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.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...
Re: Mit Java erstellte HSQLDB-Datenbank in OOo Base öffnen
Nein, vor Deinem Hinweis hatten die Tabellen keinen Primary Key. Habe daher den Quellcode, mit dem die Tabellen generiert werden, abgeändert zu (bspw.):hol.sten hat geschrieben: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.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...
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
Ich habe mal eine OOo Base Datei angelegt und eine Tabelle Person mit vier Spalten erzeugt: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...
- 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)
...
- 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
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.hol.sten hat geschrieben:Ich habe mal eine OOo Base Datei angelegt und eine Tabelle Person mit vier Spalten erzeugt: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...
- 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:Im Vergleich zu deinem Create-Statement fallen mir zwei Unterschiede auf:Code: Alles auswählen
... CREATE CACHED TABLE "Person"("ID" INTEGER NOT NULL PRIMARY KEY,"Name" VARCHAR(50),"Vorname" VARCHAR(50),"Geburtsdatum" DATE) ...
- 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.
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.
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...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.