# Datenbank ohne Installation (Multiuser)



## Reinhard (19. Apr 2006)

Hallo,

ich hoffe das ist jetzt das richtige Forum für meinen Beitrag. Es geht eigentlich mehr allgemein um eine Datenbank, aber Zugriff darauf über JDBC.

Ich habe das Problem, dass für eine kleine Java-Anwendung ein File-Server zur Verfügung steht. Da es sich um einen größeren Konzern handelt ist es nicht ohne größere Umwege möglich, eine neue Datenbank auf einem Server anzulegen.

Meine Fräge wäre nun, ob es möglich ist auf eine Datenbank über eine Netzlaufwerk-Freigabe zuzugreifen (z.B. wie bei MS Access). Dazu habe ich gesehen, dass es HSQLDB gibt. Ist es mit z.B. HSQLDB auch möglich mehrere Benutzer auf die Datenbank zugreifen zu lassen?

Die Datenbank wird nicht sonderlich umfangreich sein. Ich denke ca. 20 Tabellen und ca. 1000 Zeilen pro Tabelle.

Falls so etwas nicht geht, müsste ich den "formalen Weg" einschlagen und eine Datenbank beantragen.

Vielen Dank,
Reinhard


----------



## AlArenal (19. Apr 2006)

Natürlich können per JDBC auch mehrere Benutzer zugreifen, auch gleichzeitig und auch im Fall von HSQLDB, aber das hat nichts mit irgendeinem File-Server zu tun, denn JDBC läuft als Protokoll direkt auf dem TCP/IP Stack.
Wenn du, wie du sagst, in einem größeren Unternehmen arbeitest und der Amtsaschimmel dort so laut wiehert, würde ich vermuten dass du nichtmal mit JDBC auf die DB kommen würdest, da zwischen lokalem Netz und Server sicher noch eine Firewall hängen dürfte.
In dem Fall bietet es sich meist nur noch an die Clients über einen Webservice an den Server anzubinden. Da hier alles über HTTP (Port 80) läuft, ist das in der Regel auch in sehr großen Konzernen unkritisch. Allerdings hast du dann natürlich einen erhöhten Entwicklungs- und Wartungsaufwand.


----------



## Reinhard (19. Apr 2006)

Hallo,

danke für die schnelle Antwort. Ich habe mir das ganze so vorgestellt (ich hoffe es ist verständlich):

Die Datenbank liegt hier (z.B. als Datei wie in MS Access):
\\server1\Datenbank\database.db (kann auch ein Netzlaufwerk sein "H:\database.db")

Das Java-Programm liegt hier:
\\server1\Programm\programm.jar (kann auch ein Netzlaufwerk sein "I:\programm.jar")

Nun wird programm.jar von User1 gestartet und greift auf database.db zu. Nun startet User2 programm.jar. Ist nun für User2 die database.db gesperrt, d.h. wird die database.db von User1 exklusiv gesperrt?

Mir geht es eigentlich im großen und ganzen nur darum, dass ich serverseitig nur "schwierig" Komponenten installieren kann. Am einfachsten wäre es in diesem Fall die Datenbank einfach so abzulegen. Ist dies mit JDBC (oder einer anderen Technologie) und HSQLDB (oder eine andere Datenbank) möglich?

Das mit dem Webservice wäre bestimmt nicht schlecht. Ist aber für dieses Projekt zu umfangreich. Außerdem müsste ich dort doch dazu auch auf dem Server den Webservice installieren / konfigurieren (das wäre ja auch so umständlich, wie mit der Datenbank  ).

Danke,
Reinhard


----------



## AlArenal (19. Apr 2006)

Mir ist kein deinen Anforderungen entsprechendes Produkt bekannt. MS Access ist ne ganz eigene Sache, da musste MS mal wieder alles anders machen, als alle anderen, ohne es wirklich besser zu machen 

Eine SQL-Datenbanbank fragt man nunmal über SQL ab und nicht indem man um die Datenbank herum in den Daten-Dateien rumwurschtelt. Ansprechpartner der JDBC-Clients ist immer das RDBMS und keine Datei oder sonstwas. Die RDBMS ist dafür zuständig die Daten konsistent zu halten und mit konkurrierenden Zugriffen zu arbeiten.

Um das weiter oben beschriebene Firewall-Problem zu umgehen kennt HSQLDB einen Web-Server-Modus. In diesem können JDBC-Clients über Port 80 auf den HSQLDB-Server zugreifen. Wo immer der Serverdienst dann im Endeffekt läuft - dort muss ihn noch immer jemand starten und ggf. warten können.

Eine Java-basiertes RDBMS, das rein auf Dateibasis und mit konkurrierendem Zugriff arbeiten kann, ist mir nicht bekannt. Sieh es als Chance dich von deiner MS Access Schädigung zu rehabilitieren...


----------



## stev.glasow (19. Apr 2006)

HSQLDB kann man doch auch im In-Process Mode laufen lassen. Kann ich dort nicht auch eine über Windowsfreigaben zugängliche Datei angeben? 

Mehrere Verbindungen von unterschiedlichen Clients wird nur nicht möglich sein da die Datenbank Engine auf dem Client in der jeweiligen VM läuft.


----------



## Reinhard (19. Apr 2006)

@AlArenal:

Ich hab ja nichts mit MS Access am Hut. Das war nur ein Beispiel von mir 
Dann muss ich das dort mit der zentralen IT doch mal abklären und ein paar "Behördengänge" vornehmen 

@stevg:

Der "In-Process Mode" hört sich schon mal ganz gut an. Schade ist aber, das man dann nicht von extern auf die "Datenbank" zugreifen kann, wenn die Anwendung läuft. Das hört sich schwer nach einem KO-Kriterium an 


Trotzdem danke für eure Informationen. Ich hab mir aber fast gedacht, das es ohne "serverseite Installation" der Datenbank (bzw. ohne RDBMS) nicht geht.

Reinhard


----------



## stev.glasow (19. Apr 2006)

Notfalls könntest du auch nen dateibasiertes System wie z.B. MS Access nehmen und über eine JDBC-ODBC Bridge (falls entsprechender ODBC Treiber vorhanden ist)  per Java darauf zugreifen.


----------



## AlArenal (19. Apr 2006)

stevg hat gesagt.:
			
		

> HSQLDB kann man doch auch im In-Process Mode laufen lassen. Kann ich dort nicht auch eine über Windowsfreigaben zugängliche Datei angeben?



Und wie soll HSQLDB damit klarkommen, wenn mehrere User zeitgleich ihren Client starten und damit dieselben DB-Dateien nutzen müssen? Schonmal versucht zwei MySQL-Instanzen mit demselben Daten-Verzeichnis gleichzeitig laufen zu lassen?


----------



## stev.glasow (19. Apr 2006)

Öh. lies mal den ganzen Post 
""Mehrere Verbindungen ... wird nur nicht möglich sein""
Oder was meinst du? Beim 2ten Client wird dass dann halt geblockt und er bekommt ne Fehlermeldung.
[edit]
Das war auch nur nen Vorschlag - dass er das eigentlich nicht so wollte war mir auch klar. Muss er halt gucken was mehr Priorität hät.


----------



## Reinhard (19. Apr 2006)

Schade, ich dachte das es ein System mit folgenden Eigenschaften gibt:



> Eine Java-basiertes RDBMS, das rein auf Dateibasis und mit konkurrierendem Zugriff arbeiten kann



Wie geschrieben, werde ich mich mit der dortigen IT-Abteilung (bzw. Fachabteilung) abstimmen, um Zugriff auf eine "komplette" Datenbank zu bekommen 

Schöne Grüße,
Reinhard


----------

