# Problem mit Datenbankverbindung



## Tobias ST (25. Okt 2017)

Hallo Zusammen,

ich habe folgendes Problem:
Ich möchte für meine Mutter, nach Ihren wünschen, ein Programm schreiben um Ihre Lebensmittelvorräte zu verwalten. Dazu benötige ich eine Access Datenbank am besten ohne ODBC. Ich benutze MS Office 2010.

Im Internet habe ich folgende Möglichkeit gefunden http://wiki.byte-welt.net/wiki/Datenbankverbindung_(Java)#Access_Datenbank 

Dies habe ich für mein Programm erst einmal so angepasst

```
try{
     String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,*.accdb);DBQ=C:/Users/Tobias Stüer/Documents/Database2.accdb;READONLY=false}";    

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
java.sql.Connection con = DriverManager.getConnection(url, "", "");
            System.out.println("ALLES OK");
}catch(Exception e){
            System.out.println("FEHLER");
            System.err.println(""+e.getMessage());
        }
```

Bei der Ausführung wird dann folgender Fehler ausgegeben:


> Executing C:\Users\Tobias Stüer\Documents\NetBeansProjects\TT-Liveticker\dist\run415007486\TT-Liveticker.jar using platform C:\Program Files\Java\jdk1.8.0_144/bin/java
> FEHLER
> sun.jdbc.odbc.JdbcOdbcDriver



Kann mir jemand sagen was ich falsch gemacht habe?
Vielen Dank im Vorraus


----------



## mrBrown (25. Okt 2017)

Lass dir mal den Stacktrace ausgeben


----------



## Tobias ST (25. Okt 2017)

```
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at tt.liveticker.windows.controller.Datenbankverbindung.<init>(Datenbankverbindung.java:32)
    at tt.liveticker.windows.controller.AufstellungController.initialize(MasterController.java:86)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
    at vorrat.windows.controller.FXMLDocumentController.neuenLiveticher(FXMLDocumentController.java:141)
    at vorrat.windows.controller.FXMLDocumentController.singleLivetickerManuel(FXMLDocumentController.java:93)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
    at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
    at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:748)
```


----------



## mrBrown (25. Okt 2017)

Und hilft dir das vielleicht weiter?


----------



## Tobias ST (25. Okt 2017)

Da steht dass der Treiber nicht gefunden wurde. Nur ich habe keine Ahnung warum.

Daher hilft es mir nur bedingt weiter.


----------



## Flown (25. Okt 2017)

jdbc-odbc bridge wurde in Java 8 eingestampft! Nutze doch http://ucanaccess.sourceforge.net/site.html dafür


----------



## JuKu (28. Okt 2017)

```
java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
```

Eig. ziemlich eindeutige Fehlermeldung. Die Klasse konnte nicht gefunden werden, dies liegt wahrscheinlich daran, dass sie nicht existiert.
Vermutlich, weil du die Library / natives nicht eingebunden hast. Desweiteren muss dieser Treiber schon uralt sein, weil er noch mit "sun.*" startet. Falls du den Treiber überhaupt noch zum Laufen bekommen solltest - @Flown hat ja bereits gesagt, dass er eingestampft wurde - dann wird er spätestens mit Java 9 (dank Jigsaw) nicht mehr ohne weiteres funktionieren.

Wieso überhaupt Microsoft Access?


----------



## Tobias ST (5. Nov 2017)

Ich hatte an Access gedacht weil so die Weitergabe des Programms mit der Datenbank besser klappen würde. 
Nach dem ich gelesen habe, dass die "jdbc-odbc bridge" nicht mehr existiert. Habe ich mich mit der Datenbank die bei Netbeans vorhanden ist etwas beschäftigt. 
Laut Internet soll da ja die Weitergabe funktionieren.


----------



## JuKu (17. Nov 2017)

Welche Datenbank meinst du?
Die bei Netbeans vorhanden ist?

Normalerweise laufen Datenbanken *nicht lokal*, sondern man hat einen Datenbanken *Server*. Dieser kann natürlich wiederum lokal laufen, wenn notwendig. Aber aus diesem Grund wirst du kaum eine Datenbank ohne Server finden.
Wenn du wirklich was rein lokales brauchst, dann schau dir bitte SQLite an.

https://www.sqlite.org/
http://www.sqlitetutorial.net/sqlite-java/


----------



## mrBrown (17. Nov 2017)

JuKu hat gesagt.:


> Normalerweise laufen Datenbanken *nicht lokal*, sondern man hat einen Datenbanken *Server*. Dieser kann natürlich wiederum lokal laufen, wenn notwendig. Aber aus diesem Grund wirst du kaum eine Datenbank ohne Server finden.



Normalerweise gilt das aber auch nur für WebAnwendungen.
Der Großteil aller Datenbanken dürfte lokal laufen.


Grad für Java gibts da auch noch H2 und HSQLDB.


----------



## stg (17. Nov 2017)

Tobias ST hat gesagt.:


> Ich hatte an Access gedacht weil so die Weitergabe des Programms mit der Datenbank besser klappen würde.
> Nach dem ich gelesen habe, dass die "jdbc-odbc bridge" nicht mehr existiert.



Du kannst dir auch mal https://mvnrepository.com/artifact/net.sf.ucanaccess anschauen


----------



## JuKu (22. Nov 2017)

mrBrown hat gesagt.:


> Normalerweise gilt das aber auch nur für WebAnwendungen.
> Der Großteil aller Datenbanken dürfte lokal laufen.
> 
> 
> Grad für Java gibts da auch noch H2 und HSQLDB.



Ja, da hast du prinzipiell recht.
Aber wie viele Anwendungen laufen denn heute *nur noch lokal*?
Sobald man mit jemandem zusammen arbeiten möchte (z.B. in einem Unternehmen), kommt man um einen Server nicht mehr drum herum.


----------



## mrBrown (22. Nov 2017)

JuKu hat gesagt.:


> Ja, da hast du prinzipiell recht.
> Aber wie viele Anwendungen laufen denn heute *nur noch lokal*?


z.B. die Anwendung, mit der du grad den Kommentar verfasst hast.
Die meisten Programme nutzen auch eine rein lokale Datenbank.

Whatsapp allein dürfte auf so ne knappe Milliarde rein lokale Datenbanken kommen


----------



## HarleyDavidson (23. Nov 2017)

Für eine kleine lokale Datenbank 
kann ich die H2 empfehlen. 
http://www.h2database.com/
Die Datenbank ist eine einzige Datei und mit einem Doppelklick auf die JAR startet ein kleiner Webserver, mit dem man auf eine kleine Administrationsoberfläche mit SQL-Funktion und weiteres gelangt.
Diese Datenbank unterstützt unter anderem auch Sequences und Trigger, die man auch aus dem Oracle-Umfeld kennt.
Ich habe schon mehrere Projekte damit realisiert und bin immer zufrieden damit gewesen.


----------



## JuKu (23. Nov 2017)

mrBrown hat gesagt.:


> Whatsapp allein dürfte auf so ne knappe Milliarde rein lokale Datenbanken kommen



Da hast du natürlich recht! 
Allerdings arbeiten die Datenbanken auf dem Handy ja auch nicht komplett unabhängig von den Servern.
Denn Whatsapp selbst hat ja die Server, die die Nachrichten dann erst ans Handy schicken.


----------



## mrBrown (23. Nov 2017)

JuKu hat gesagt.:


> Da hast du natürlich recht!
> Allerdings arbeiten die Datenbanken auf dem Handy ja auch nicht komplett unabhängig von den Servern.
> Denn Whatsapp selbst hat ja die Server, die die Nachrichten dann erst ans Handy schicken.


Allerdings sind Server-DB und lokale DB völlig unabhängig 

Ansonsten: die meisten Browser nutzen auch eine völlig lokale DB, ohne irgendeinen Server dazu


----------



## JuKu (23. Nov 2017)

Das stimmt natürlich. Sie kommunizieren nur über den Anwendungscode. 
Und auf die Browser wäre ich jetzt hier gar nicht mehr gekommen. 
Aber das verwenden die Web Developer halt auch kaum noch.

H2 wäre für seinen Anwendungsfall wohl das beste.


----------



## Flown (23. Nov 2017)

JuKu hat gesagt.:


> Aber das verwenden die Web Developer halt auch kaum noch.


What?


----------



## mrBrown (23. Nov 2017)

JuKu hat gesagt.:


> Und auf die Browser wäre ich jetzt hier gar nicht mehr gekommen.
> Aber das verwenden die Web Developer halt auch kaum noch.


Web Developer, die keine Browser verwenden? 
Nutzen die dann inbrain statt WebKit?


----------



## JuKu (23. Nov 2017)

Sry, so meinte ich das nicht. 
Ich meinte, dass die wenigsten Web Developer noch auf die Browser interne Datenbank (über JS) zugreifen. Also quasi den lokalen Speicher.
Sowas wie es jetzt als Neuauflage unter HTML5 gibt:
https://wiki.selfhtml.org/wiki/JavaScript/Web_Storage


----------



## mrBrown (23. Nov 2017)

JuKu hat gesagt.:


> Ich meinte, dass die wenigsten Web Developer noch auf die Browser interne Datenbank (über JS) zugreifen. Also quasi den lokalen Speicher.


Ich hab nicht von einer Datenbank geredet, auf die man per JS zugreifen könnte, um sie als lokalen Speicher für irgendwas zu nutzen


----------



## truesoul (24. Nov 2017)

JuKu hat gesagt.:


> Sry, so meinte ich das nicht.
> Ich meinte, dass die wenigsten Web Developer noch auf die Browser interne Datenbank (über JS) zugreifen. Also quasi den lokalen Speicher.
> Sowas wie es jetzt als Neuauflage unter HTML5 gibt:
> https://wiki.selfhtml.org/wiki/JavaScript/Web_Storage



Das entspricht nicht der Tatsache. Web Developer entwickeln auch Hybride App's und verwenden z. B den SQLite im Browser wie Chrome. 

Wobei Web Storage auch geht. 

Sprichwort: Cordova, Ionic usw.

Grüße


----------



## JuKu (26. Nov 2017)

mrBrown hat gesagt.:


> Ich hab nicht von einer Datenbank geredet, auf die man per JS zugreifen könnte, um sie als lokalen Speicher für irgendwas zu nutzen



Sry, dann hatte ich deine Aussage leider anders verstanden.


----------

