# Datenbank ohne Server



## Gast (15. Mai 2006)

Hallo,

ich bin noch neu im Java-Geschäft.
Wie kann ich am besten eine DB einbinden, die lokal auf dem Rechner liegt (also als Datei) und die eine SQL-Abfrage bereitstellt?
Also quasi wie MySQL, nur dass die Daten beim Ntzer liegen.

Danke


----------



## norman (15. Mai 2006)

ich glaube ich verstehe dich nciht ganz..du willst beim endnutzer eine DB installieren, auf die du dann von deiner applikation aus zugreifst?
und wie kann eine DB eine abfrage "bereitstellen"? in einer DB sind, wie der name vermuten lässt, daten - und keine abfrage nach diesen.


----------



## thE_29 (15. Mai 2006)

MS Access!

Das ganze kannst du dann in ODBC einbinden oder direkt drauf zugreifen!

Direkter zugriff sieht so aus:


```
String strDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String strUrl = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\datenbank.mdb";

Connection con = null;

try{
Class.forName(strDriver);
con = DriverManager.getConnection(strUrl);
}
catch(Exception ex)
{ 
ex.printStackTrace();
}
```

Wobei die Access Datenbank halt  auf C:\ liegt und datenbank.mdb lautet!

Über ODBC gehts bisi anders nämlich gehört die Url verändert: 

strUrl = jdbcdbc:database

Wobei database die freigebene Quelle im ODBC Kontext ist (was das ist, ergoogelst du einfach)


----------



## Gast (15. Mai 2006)

Ok, war ein Missverständnis:
Ich will ein Programm, was mit DBs arbeitet, schreiben.
Der User soll NICHT - also keine Datenbank - zusätzlich installieren müssen.
Die gespeichert DB soll dann als ein einzelne Datei vorliegen.
Außerdem wäre es gut, wenn ich auf die Daten per SQL-Syntax zugreifen könnte.
Was bietet sich da an?


----------



## bummerland (15. Mai 2006)

z.B. HSQLDb oder SQLite


----------



## thE_29 (15. Mai 2006)

Was ist an meiner Lösung bitte so schlimm??

Access ist genau das was du willst und net HSQLDb oder sonstiges!

Da muss die ganze Zeit was laufen, sprich man muss was starten!

Eine Access DB liegt nur rum und man kann drauf zugreifen (mit SQL Syntax)


----------



## SamHotte (15. Mai 2006)

Naja, Access liegt halt nicht bei jedem auf dem Rechner 'rum ...


----------



## thE_29 (15. Mai 2006)

Nücht?

<ot>Office ist bei mir seit meinem ersten PC immer dabei 

Für was gibts für Studenten die billige Studentenversionen und für die anderen die Firmen 

Studenten haben sowieso immer Glück!

Win XP Pro 6 €

office 2k3 6€

etc..

http://sts.tuwien.ac.at/sss.php</ot>


Ansonsten soll er sich von nem Freund oder dgl, einfach ne leere access db erstellen lassen!

Er kann ja via Create table, etc sowieso die Tabellen dann per SQL erstellen!


----------



## AlArenal (15. Mai 2006)

SamHotte hat gesagt.:
			
		

> Naja, Access liegt halt nicht bei jedem auf dem Rechner 'rum ...



Halleluja, Bruder!

Zum Thema:
"Weapon of choice" für einen Java-Entwickler bei den genannten Anforderungen ist sicher eine Java-DB die einen "in process"-Modus hat, also fest zum Programm gehört und nicht gesondert gestartet werden muss. Populäre Vertreter sind Java DB (aka Apache Derby, ehemals IBM, ehemals Cloudscape), HSQLDB (das auch in Open Office 2.0 seinen Dienst versieht), H2, McKoi, ... - allesamt Open Source und frei verwendbar.

@the_29:
Als nächstes rätst du ihm vermutlich noch, es mit Excel zu machen. Man kann die Dinge natürlich auch unnötig verkomplizieren.


----------



## SamHotte (15. Mai 2006)

AFAIK wird Access nur bei Office Professional mitgeliefert (korrigiert mich bitte, wenn die Info veraltet ist); die meisten Aldi-PCs haben aber - wenn überhaupt - die Personal-Variante.

In Unternehmen würde ich nicht grad Access empfehlen (außer für Quick-n-dirty-Prototypen).

Und ob du mit einer Access-Datenbank was anfangen kannst, wenn das DBMS nicht installiert ist, wage ich mal zu bezweifeln ;-)


----------



## thE_29 (15. Mai 2006)

Ich weiß net was ihr alle gegen Access habt!

Geht mal auf ne MS Schulung!

Die raten erst ab zig Daten (bzw gigabyte) zum MSSQL Server.

Ich selber war net dort (waren die Supportler) von daher...



Problem bei den von euch genannten Datenbanken ist eben das da ein "Server" bzw eine Instanz von der Datenbank laufen muss!

Was bei Access eben nicht muss!

Lest euch mal die Anforderungen vom user durch!

Mir gehts net drum das access net das beste ist, aber genau was der Threadersteller will kann es und für sowas ist das am besten geiegnet!

@SamHotte: Mein 2t PC daheim hat kein Office oben und dort geht so ein Bsp auch ohne probs!

Wie gesagt, Java hat diese ODBC Bridge schon dabei und MS hat bei den ODBC Einträgen access auch immer drinnen. (beim Win2k wars so)


----------



## thE_29 (15. Mai 2006)

Achja nochwas!

Wenn er Access hat und diese DB nur zum Testen nimmt, anstatt immer nen MYSQL Server zum Nutzen, dann ist Access in diesem Fall sicher zig mal zu bevorzugen, bevor ich mit einer Java DB rummach, da das einfacher zu konfen ist


----------



## AlArenal (15. Mai 2006)

thE_29 hat gesagt.:
			
		

> Ich weiß net was ihr alle gegen Access habt!



Wenn man es nicht eh schon hat, ist es einfach nicht nötig dafür Geld auszugeben, um eine Java-Anwendung zu entwickeln. Noch "lustiger" ist es bei anderen Usern der Software dann Access vorauszusetzen.



> Geht mal auf ne MS Schulung!



Warum, machen die auch Open Office? 



> Problem bei den von euch genannten Datenbanken ist eben das da ein "Server" bzw eine Instanz von der Datenbank laufen muss!



Das ist falsch. Vielleicht gehst du erstmal auf kostenlose Rundreise durchs Web, ehe du uns auf ne kostenpflichtige MS-Tuppa-Party schickst.


----------



## thE_29 (15. Mai 2006)

HSQLDB = Server (sonst hätte ich diese Variante schon genommen)

Derby = okay, da braucht man keinen Server, hätte auch mal statt access derby verwenden können! (hier gibts aber auch wieder den servermode!)

Nur wo wird da 1e Datei mit Derby etc abgespeichert?

Das sind zig Dateien! Bzw, muss man sich dann noch durch die API wühlen wie ich das mit dem DriverManager überhaupt lade?

Die anderen 2 bin ich zu faul zum Nachschaun, bist dir aber sicher das da kein Server wie bei HSQLDB laufen muss?


Tjo und wie von mir schon beim 2ten Post beschrieben, ist Access eben genau das was er will.


Wenn er Access hat, isses imho das beste! Geht am schnellsten einrichten (bzw man muss nur ne Datei kopieren) keine weiteren classpathes oder etc, eintragen...
Sprich super 

Ansonsten spricht nix gegen Derby (außer das da zig Files und net 1e Datei abgelegt werden..)


----------



## L-ectron-X (15. Mai 2006)

Auch eine HSQLDB kann man in einem Modus laufen lassen, der keinen weiteren Start einer Serveranwendung erfordert. Lies mal: http://de.wikipedia.org/wiki/HSQL


----------



## thE_29 (15. Mai 2006)

Echt?

Wie wo?

Damals im chat hat mir jeder gesagt, dass das net geht!

Toll²


----------



## AlArenal (15. Mai 2006)

thE_29 hat gesagt.:
			
		

> HSQLDB = Server (sonst hätte ich diese Variante schon genommen)



Falsch. HSQLDB hab ich vor Jahren schon in einer Standalone-App (was immer das bei Java auch heißt  ) benutzt. HSQL kennt von Haus aus einen Server-Modus, einen Web-Modus (wie Server-Modus, aber auf dem Firewall-freundlichen Port 80) und einen In-Process-Modus.



> Derby = okay, da braucht man keinen Server, hätte auch mal statt access derby verwenden können!



Hat nen Server- und nen In-Process-Modus.



> Nur wo wird da 1e Datei mit Derby etc abgespeichert?



Bei HSQLDB da, wo du sie hinkonfigurierst. Hatte mir Derby mal angeschaut, kurz nachdem IBM es freigegeben hatte. War mir zu umständlich, zu langsam, zu aufgeblasen und bin bei HSQL geblieben.



> Das sind zig Dateien! Bzw, muss man sich dann noch durch die API wühlen wie ich das mit dem DriverManager überhaupt lade?



K.a. wie Derby das managet und wie man es evtl. anders konfiggen kann. Bei HSQL (und H2 ist da 1:1 kompatibel) kann man direkt auf einer CSV-Datei arbeiten. Und was das "API-Wühlen" angeht ist das ebenso ein Einzeiler, wie bei jeder anderen JDBC-Verbdindung auch. Und nun erzähl mir nciht, wenn man Access aus Java benutzt, weiß der Sourcecode dank Eingabe von Gott selbst, wie er sich zu connecten hat...



> Tjo und wie von mir schon beim 2ten Post beschrieben, ist Access eben genau das was er will.



Nur scheinbar, weil du dich offensichtlich mit den Java-DBs nicht wirklich ausreichend beschäftigt hast, um das richtig einordnen zu können.


----------



## AlArenal (15. Mai 2006)

thE_29 hat gesagt.:
			
		

> Echt?
> 
> Wie wo?
> 
> ...



Vermutlich haben die auch nur weitergeplappert, was einmal ein einzelner an Murks verzapft hat, anstatt sich mal selbst ein Bild zu machen.


----------



## Larouso (15. Mai 2006)

HSQLDB hat halt das Problem, dass immer nur eine Verbindung zur gleichen Datenbank zu einem Zeitpunkt bestehen kann... jedenfalls ist das bei mir damals so gewesen... anonsten ist das glaub ich schon genau das was du suchst.


----------



## AlArenal (15. Mai 2006)

Der Vollständigkeit halber:
http://www.hsqldb.org/doc/guide/ch01.html#N101A8


----------



## thE_29 (15. Mai 2006)

Oho! 

Naja, dann hätte ich HSQLDB nehmen können!

Naja, egal. SW läuft jetzt mit Access DB und mein Geld habe ich auch schon dafür bekommen :bae:


Wieder mal was neues gelernt (man lernt ja nie aus :bae


----------



## AlArenal (15. Mai 2006)

Ab in die Ecke und schäm dich!


----------



## thE_29 (15. Mai 2006)

*indereckesteheundschäm*

PS.: Asurede hab: Ich arbeite grundsätzlich nur mit Oracle, also was interessieren mich diese DBs 
hihi :bae:


----------



## thE_29 (9. Jun 2008)

So muss den Thread wieder ausgraben 

Freund von mir hat auf anraten dieses Threads hier (von mir) HSQLDB genommen (statt Access).

Tjo und nun meinte er, dass HSQLDB im Standalone Betrieb die Daten so merkt, indem es sich alle SQL Befehle merkt (inserts, deletes, etc..).

Natürlich dauert das nach jedem neustart der Anwendung >30 Sekunden und wird immer länger (ist ne DB für MP3 Sammlung).

Aber das kanns ja jetzt wirklich nicht sein, dass sich HSQLDB die Daten so "merkt" oder? 
Gibts da noch einen Modus? Ansonsten ist das Teil ineffizient zum Quadrat (außer man schaltet die App nie aus, aber da würde ich dann ja sowieso nen Server nehmen) und sowas empfehlt ihr einem hier? :bae:


----------



## xote (9. Jun 2008)

Ich denke mal, da haut er was mit den cached modes durcheinander.

btw: HSQLDB is dead. Long live the new king H2!


----------



## Alex_winf01 (22. Jun 2008)

@ All

wir steigen gerade um von Access auf Oracle. Bei insgesamt > 50 GB Datenvolumen jährlich!!! hört Access definitiv auf.


----------



## Gelöschtes Mitglied 5909 (22. Jun 2008)

> Tjo und nun meinte er, dass HSQLDB im Standalone Betrieb die Daten so merkt, indem es sich alle SQL Befehle merkt (inserts, deletes, etc..).



nehm h2 und werd glücklich


----------



## AlArenal (22. Jun 2008)

Wie lautet doch gleich der Imperativ von "nehmen" im Singular!?


----------



## Gelöschtes Mitglied 5909 (22. Jun 2008)

nimm ^^


----------

