Problem mit Datenbankverbindung

Tobias ST

Mitglied
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
Java:
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
 
Code:
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)
 
Zuletzt bearbeitet von einem Moderator:
Java:
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?
 
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.
 
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.
 
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.
 
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 😉
 
Zuletzt bearbeitet:
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.
 
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 😉
 
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.
 
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
 

Neue Themen


Zurück
Oben