BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » Sa 3. Jun 2023, 17:06

Hallo!

Da die Geschwindigkeit meiner Base-Datenbank mir immer noch nicht gefällt, will ich etwas herumoptimieren. In Roberts Handbuch habe ich gelesen, daß ODBC-Verbindungen "weniger" Java brauchen als JDBC-Verbindungen. Und da ich irgendwo aufgeschnappt habe, daß Java einfach langsam ist, hoffe ich deshalb auf eine Beschleunigung.

Bisher baue ich die Verbindung zu meiner lokalen gesplitteten DB mit JDBC auf, mit einem Pfad, der durch dieses Makro eingerichtet wurde:

Code: Alles auswählen

Sub Setup 'Tools > Customize... > Events > Open Document 
 'Globalscope.BasicLibraries.LoadLibrary("MRILib")
 On Error Goto ErrorHandler
  'get the current path to this .odb file
	sPathURL = ThisDatabaseDocument.URL
	sPath = ConvertFromURL(sPathURL)
	sName = ThisDatabaseDocument.Title
	iLen = InStr(sPath, sName)
	sPath = Left(sPath, iLen-1)
	    
  'setup Class Path
  ClassPath:
	sClassPath = sPath & "hsqldb.jar"
	If Not FileExists(sClassPath) Then 
		sLine1 = "Please add a copy of the HSQLDB engine (hsqldb.jar) to the current folder :  "
		sLine2 = "NOTE:  This is necessary for proper wizard function, but additional benefits include : " 
		sLine3 = "* enhanced portability of the database-folder"
		sLine4 = "* ensures database compatibility across computers and *Office installations"
		sLine5 = "* guards against inadvertent upgrade of your database since the results are uncertain and irreversible"
		sLine6 = "* hsqldb 2.x provides a built-in database management GUI accessible by clicking hsqldb.jar."
		iButton = MsgBox (chr(13) & sLine1 & chr(13) & chr(13) & sPath & chr(13) & chr(13) & sLine2 & chr(13) & sLine3 & _
		chr(13) & sLine4 & chr(13) & sLine5 & chr(13) & sLine6, 18, "hsqldb.jar not found")
		If iButton = 3 Then Exit Sub 'ThisDatabaseDocument.close(True)
		If iButton = 4 Then Goto ClassPath
	End If
	sClassPath = ConvertToURL(sClassPath)
	ThisDatabaseDocument.DataSource.Settings.JavaDriverClassPath = sClassPath
    
  'get the HSQL database name from the current folder
	NextFile = Dir(sPath, 0)
	While NextFile <> ""
		If (Right(NextFile, 7) = ".script") Then dbName = (Left(NextFile, Len(NextFile)-7))
		NextFile = Dir
	Wend
    
	If dbName = Empty Then 
		sLine1 = "Optionally provide a name for your back-end data files. "
		sLine2 = "NOTE: The particular name is not important. The default below will suffice. "
		dbName = InputBox(sLine1 & chr(13) & chr(13) & sLine2, "Create a new database    *   JDBC  |  HSQL database engine  |  non-embedded data files   *", "mydb")
		If dbName = "" Then dbName = "mydb"
	End If
    
  'check for existing database
	sLine1 = "A new database will be created in the current folder:  "
	sLine2 = "NOTE: This folder constitutes your ""database."" "
	sLine3 = "A dedicated database folder is fully portable, and as such it may be renamed or moved as desired."
	sLine4 = "NOTE: This Base front-end file (" & sName & ") must remain in this database folder.  "
	sLine5 = "You may rename this file as desired, but do maintain the .odb extension if visible. Create a desktop shortcut to this file as desired."
	sLine6 = "NOTE: The back-end HSQL data files will be named: " & dbName & ".*  "
	sLine7 = "These files must also remain in this database folder."
	If Not FileExists(sPath & dbName & ".script") Then MsgBox sLine1 & chr(13)_
		& sPath & chr(13) & chr(13) & sLine2 & sLine3 _
		& chr(13) & chr(13) & sLine4 & sLine5 _
		& chr(13) & chr(13) & sLine6 & sLine7 _
		, 64, "Please Read"
     
  'setup Data Source URL
	sURL_prefix = "jdbc:hsqldb:"
	sURL_args = ";default_schema=true;shutdown=true;hsqldb.default_table_type=memory;get_column_name=false"
	sURL = sURL_prefix & "file:///" & sPath & dbName & sURL_args
	ThisDatabaseDocument.DataSource.URL = sURL
	Exit Sub

  ErrorHandler: 
	MsgBox "Error " & Err & ": " & Error$ & " (line : " & Erl & ")", 16, "Setup: macro code error"
End Sub
Nichts neues. Nicht von mir.

Jetzt würde ich gerne wissen: kann ich einfach
- ODBC installieren (HSQLDB kommt wohl mit dem PostgresQL-ODBC-Treiber zurecht, siehe https://hsqldb.org/doc/2.0/guide/odbc-c ... onfig-sect)
- und dann dieses Makro einfach abändern, indem ich in der Zeile "sURL_prefix = "jdbc:hsqldb:"" jdbc durch odbc ersetze?

Hat das schon einmal jemand ausprobiert?

Und: bringt es einen Geschwindigkeitsvorteil?

Ich hoffe auf Hinweise jeder Art. Vielen Dank.

Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von RobertG » Sa 3. Jun 2023, 18:42

Hallo Freischreiber,

das mit der Geschwindigkeit bezog sich nur auf einen Subjektiven Vergleich:

Viel Daten in einer Tabelle, springen zum letzten Datensatz. Das einmal mit der internen HSQLDB und dann mit Firebird.
Anschließend einmal mit dem direkten Treiber und einer MariaDB im Vergleich zum JDBC-Treiber mit MariaDB. Alle getestet mit der gleichen Quelle:
HSQLDB und MariaDB mit JDBC-Treiber brauchten mindestens die 15-fache Zeit zum scrollen bis zum letzten Datensatz gegenüber Firebird und MariaDB mit dem direkten Treiber.

Eine HSQLDB ist bereits eine Java-Datenbank. Ob da ein Geschwindigkeitsunterschied zwischen JDBC und ODBC zu messen sein wird kann ich nicht sagen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » So 4. Jun 2023, 11:15

RobertG hat geschrieben:
Sa 3. Jun 2023, 18:42

HSQLDB und MariaDB mit JDBC-Treiber brauchten mindestens die 15-fache Zeit zum scrollen bis zum letzten Datensatz gegenüber Firebird und MariaDB mit dem direkten Treiber.

Hallo Robert,

dann habe ich es doch richtig verstanden? Bei diesen beiden Datenbanken ist die JDBC-Verbindung das Nadelöhr. Und du vermutest, da HSQL bereits eine Java-Datenbank ist, ist die ohnehin so langsam, daß eine schnellere Verbindung sie nicht "retten" kann?

Ich würde es einfach gerne einmal ausprobieren.

Da es für HSQL-Datenbanken offenbar keinen direkten Treiber gibt, wollte ich es mit ODBC versuchen. Die Umstellung der ganzen Datenbank von HSQL auf Firebird ist voraussichtlich eine größere Aktion, oder?

Den ODBC-Treiber habe ich jetzt einmal in Windows installiert, kann ihn theoretisch auch konfigurieren in der Systemsteuerung, habe aber praktisch keine Ahnung, wie genau.

In der Base-Datei kann ich die installierte ODBC-Datenquelle auch auswählen, aber ich schaffe es nicht, bis zur Datenbankdatei hin zu verbinden.

Wer weiß etwas Genaueres?

Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Wanderer » Mo 5. Jun 2023, 07:57

Freischreiber hat geschrieben:
So 4. Jun 2023, 11:15
...

Den ODBC-Treiber habe ich jetzt einmal in Windows installiert, kann ihn theoretisch auch konfigurieren in der Systemsteuerung, habe aber praktisch keine Ahnung, wie genau.
...
Windows hat ein Suchfeld im Startmenü. Tipp einfach odbc dort ein und warte ein bischen.

Erste Hürde: Wenn Du noch 32bit LO/32-bit java verwendest, musst Du auch die 32bit-Version bei der ODBC-Konfiguration nehmen, sonst 64-bit.

Als normaler User kannst Du nur eine User/Benutzer DSN anlegen, aber zum probieren reicht das....

Dann würde ich erstmal die Einstellungen entsprechend der von Dir schon verlinkten Quelle machen, wobei ich annehme, dass Deine Split-DB auf demselben Rechner läuft, wie LibreOffice, Du also localhost als Server hast.
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » Mo 5. Jun 2023, 09:28

Hallo Wanderer,

ja, den ODBC-Datenquellen-Administrator habe ich gefunden in der Systemsteuerung, und dort auch die empfohlenen Einstellungen gemacht. Windows, LO, Java und der ODBC-Treiber sind alle auf 64 Bit.

Dann kommt beim Testen der Verbindung allerdings diese Fehlermeldung:
ODBC-Meldung.png
ODBC-Meldung.png (5.82 KiB) 2228 mal betrachtet
Und ich vermute, daß tatsächlich ein Server benötigt wird für diese Verbindung. Ich betreibe die Datenbank aber dateibasiert, fast so wie die Embedded-HSQL-Datenbank von Base selbst. Ein Server läuft bei mir also nicht.

Viele Grüße
Freischreiber
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von RobertG » Mo 5. Jun 2023, 11:11

Hallo Freischreiber,

für eine ODBC-Verbindung brauchst Du natürlich einen Datenbankserver. Wenn Du bisher nur mit einer externen Version Deiner HSQLDB gearbeitet hast und keinen entsprechenden Server installiert hast, dann wird das nichts.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » Mo 5. Jun 2023, 15:58

Hallo Robert - und hallo R (der mir damals diese bzw. ähnliche bat-Dateien gezeigt hat)

hm, also doch erst einmal das hier zum Laufen kriegen:

viewtopic.php?f=10&t=15641&p=39079#p39054

Ist ja auch schon über sieben Jahre her und die Feiertage sind auch vorbei... :D

Also, es klappt tatsächlich, einen "Server" zum Laufen zu bringen mit dieser Start.bat:

Code: Alles auswählen

@echo off
set jarpath=hsqldb.jar
java -cp "%jarpath%" org.hsqldb.Server -database.0 file:dbname
pause
exit
(Das "set javapath=..." konnte ich weglassen, weil mein Java im Pfad eingetragen ist.)

Was nicht klappt, ist die Verbindung. Wenn ich in das Frontend unter Menü Bearbeiten/Datenbank/Eigenschaften eingebe:

Code: Alles auswählen

hsqldb:hsql://localhost/;default_schema=true
dann erhalte ich: "Die Treiberklasse '' konnte nicht geladen werden."

Und noch beunruhigender: Mit keiner der beiden angegebenen Stop.bat-Dateien kann ich den Server wieder beenden.
Ich versuche:

Code: Alles auswählen

@echo off
set jarpath=sqltool.jar
set sql=--sql "shutdown compact;"
set authentication=--inlineRC url=jdbc:hsqldb:hsql://localhost,User=SA,Password=
java -jar "%jarpath%" %sql% %authentication%
pause
exit
und erhalte: "Konnte keine Verbindung herstellen zu jdbc:hsqldb:hsql://localhost als Benutzer "java.net.ConnectException: Connection refused: connect"!
Ursache: java.net.ConnectException: Connection refused: connect
Drücken Sie eine beliebige Taste . . ."

Woran könnte es liegen?
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » Mo 5. Jun 2023, 16:04

Ergänzung:

Das Starten des Servers bringt folgende Antwort:
[Server@5fa7e7ff]: Startup sequence initiated from main() method
[Server@5fa7e7ff]: Could not load properties from file
[Server@5fa7e7ff]: Using cli/default properties only
[Server@5fa7e7ff]: Initiating startup sequence...
[Server@5fa7e7ff]: Server socket opened successfully in 24 ms.
[Server@5fa7e7ff]: Database [index=0, id=0, db=file:dbname, alias=] opened successfully in 3818 ms.
[Server@5fa7e7ff]: Startup sequence completed in 3989 ms.
[Server@5fa7e7ff]: 2023-06-05 14:02:51.372 HSQLDB server 2.7.2 is online on port 9001
[Server@5fa7e7ff]: To close normally, connect and execute SHUTDOWN SQL
[Server@5fa7e7ff]: From command line, use [Ctrl]+[C] to abort abruptly
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

Freischreiber
Beiträge: 755
Registriert: Fr 28. Mär 2014, 10:41

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Freischreiber » Mo 5. Jun 2023, 17:34

Ich lach mich kaputt: das CMD-Fenster der start.bat muß offen bleiben während der ganzen Sitzung. Und darf erst geschlossen werden, nachdem die stop.bat ausgeführt wurde. Mit offenem Fenster klappt die Verbindung und anschließend auch der Shutdown.

Kann man das nicht anders machen? Oder dieses schwarze Fenster irgendwie ausblenden, damit man es nicht aus Versehen wegklickt?
Freischreiber nutzt seit 6/2023 LibreOffice Version: 7.2.7.2 (x64) unter Windows 10 und SplitDB mit HSQL 2.7.2.

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: HSQL-Datenbank von JDBC- auf ODBC-Verbindung umstellen

Beitrag von Wanderer » Di 6. Jun 2023, 09:15

Freischreiber hat geschrieben:
Mo 5. Jun 2023, 17:34
Ich lach mich kaputt: das CMD-Fenster der start.bat muß offen bleiben während der ganzen Sitzung.
...
Kann man das nicht anders machen? Oder dieses schwarze Fenster irgendwie ausblenden, damit man es nicht aus Versehen wegklickt?
Die übliche Methode bei Datenbankservern ist sie als Dienst im Hintergrund laufen zu lassen, was bei MariaDB gut funktioniert.
.
Ansonsten gibt es durchaus auch Möglichkeiten das Fenster zu verkleinern - schau mal bei /min und /b als option für start:
https://superuser.com/questions/198525/ ... background
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten