Homepage von Jean-René Thies — Projekte & Tools rund um Java, Groovy, Grails, PHP, Scala, MySQL...
    « Tutorial: JavaHelp erzeugen und in Java-Applikationen einbindenBasic for Beginners »

    Tutorial: Access-Datenbank-Zugriff mit Java programmieren

    Permalink 02.12.06 11:17, von jrt, Kategorien: Project Plaza, Java , Schlagworte: access, java, tutorial

    Eine neue Datenbank mit Access zu bauen, ist nicht sehr schwer. Aber Access als Benutzeroberfläche für die Anwender? Das scheitert meist an zu wenig vorhandenen Installationen des Programms.
    Also: Warum nicht eine eigene, schlanke Benutzeroberfläche programmieren, die ohne Access direkt auf die mdb-Datei zugreift? Der Aufwand ist nicht groß, wenn man es mal erfolgreich ausprobiert hat. Und die Kosten für Softwarelizenzen liegen bei Null!
    In diesem Tutorial werden die grundlegenden Schritte für ein einfaches Frontend beschrieben.

    Fortsetzung:

    Was wird benötigt?

    1. Java JDK und eine Entwicklungsumgebung, in diesem Tutorial verwenden wir JDK 5.0 und NetBeans 5.5 (zur Download-Seite).
    2. Eine Access-Datenbank-Datei. Die kann man selbst erstellen oder für dieses Tutorial herunterladen.

    Vorbereitungen
    Wir gehen in diesem Tutorial davon aus, dass die Datenbank-Datei "kontakte.mdb" heißt und im Verzeichnis "C:\tutorial\" liegt (für den gemeinsamen Zugriff durch mehrere Anwender könnte man ebenso ein Netzlaufwerk verwenden). Die Datenbank enthält eine Tabelle "adressen" mit folgenden Spalten:
    ID (Primärschlüssel, wird automatisch hochgezählt), Vorname, Nachname, Straße, PLZ, Ort, Telefon, Telefax, Geburtsdatum.

    Bevor es mit der Programmierung losgeht, können wir mit NetBeans einen Blick in die Datenbank werfen und auch schon SQL-Befehle ausführen. Dazu klickt man auf den Reiter "Runtime", dann mit der rechten Maustaste auf "Databases", dort auf den Befehl "New Connection...". Diese Eingaben sind nun erforderlich:
    Name: JDBC-ODBC-Bridge
    Driver: sun.jdbc.odbc.JdbcOdbcDriver
    Database URL: jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/tutorial/kontakte.mdb

    Wichtig: Bei der Pfadangabe zur Datenbank keine Backslashes (\), sondern Slashes (/) verwenden!

    Die Felder "User Name" und "Password" bleiben in diesem Fall leer. Die Option "Remember Password during this session" kann markiert werden.

    Nach einem Klick auf "OK" erscheint nun eine Warnung "Unable to obtain schema", die wir getrost ignorieren können. Wenn im nachfolgenden Dialog "Connection established" steht, ist alles in Ordnung!

    Nun wollen wir einen ersten Versuch mit einer Datenbank-Abfrage unternehmen. Mit der rechten Maustaste klickt man auf den neuen Eintrag "jdbc:odbc:..." unter "Databases" und wählt "Execute Command...". Im neu geöffneten Fenster "SQL Command 1" geben wir

    SELECT * FROM adressen


    ein und klicken auf den Button "Run SQL".

    Nun sollte der gesamte Inhalt der Datenbank zu sehen sein: Zwei komplett ausgefüllte Adresszeilen.

    Die Datenbank-Ansicht ist sehr praktisch, um Feldnamen (bzw. Spaltennamen) und aktuelle Inhalte nachzusehen oder um eigene SQL-Befehle auszuprobieren. Für die weiteren Schritte in diesem Tutorial brauchen wir sie aber nicht mehr. Deshalb beenden wir die Datenbankverbindung mit einem Rechte-Maustaste-Klick auf den "jdbc:odbc:..."-Eintrag und dem Befehl "Disconnect". Dann klicken wir auf den Reiter "Projects" und starten mit der Programmierung!

    Seiten: 1 · 2 · 3

    14 Kommentare »

    14 Kommentare

    Kommentar von: Helmut Rieke [Besucher]
    Guten Tag - ich versuche mich kurz zu fassen.
    Ich habe als Lehrer ( weiß alles, aber von nix alles) eine Access-Datenbank gebastelt, die auch andere Schulen brauchen können. Access hat keiner, viele Schulen arbeiten noch mit WIN2000, so dass die kostenlose runtime von MS auch nix bringt. Nun stoße ich auf Ihre Lösung, habe aber von JAVA null Ahnung. Auf welcher Oberfläche muss ich Ihren Access-Zugriff basteln? Für ein paar tipps wäre ich sehr dankbar!
    mfg
    Rieke
    16.05.08 @ 09:07
    Kommentar von: jrt [Mitglied] E-Mail
    Hallo Herr Rieke,

    die Java-Lösung, die ich hier beschreibe, ist eher etwas für (Hobby-)Programmierer, die sich eine Benutzeroberfläche komplett selbst bauen möchten. Für Sie wäre es sicher praktischer, Ihre Access-Datenbank mit einer OpenOffice-Benutzeroberfläche auszustatten. Das ist ziemlich einfach, kostet nichts und läuft auch unter Windows 2000. Man braucht dann weder das Access-Progamm noch die Access Runtime Engine. OpenOffice ist ziemlich weit verbreitet und dürfte auch in Schulen beliebt sein.

    OpenOffice finden Sie unter http://download.openoffice.org

    Nach der Installation starten Sie "OpenOffice Base". Im Datenbank-Assistent wählen Sie "Verbindung zu einer bestehenden Datenbank herstellen" und im Klappmenü darunter "Microsoft Access". Nach einem Klick auf "Weiter" können Sie den Speicherort der vorhandenen Access-Datenbank angeben. Mit "Fertig stellen" bekommen Sie einen Speichern-Dialog für die neue OpenOffice-Benutzeroberfläche. Wählen Sie am besten das gleiche Verzeichnis wie die Access-Datei.

    Die OpenOffice-Datei (odf) ist nun mit der Access-Datei verbunden und erlaubt den Zugriff auf alle Tabelleninhalte. Sie können in OpenOffice Base ganz ähnlich wie in Access Abfragen, Formulare und Berichte erstellen. Allerdings sind die Daten weiterhin in der Access-Datei enthalten, diese darf also nicht gelöscht werden. Wenn Sie Ihre Datenbank auf anderen PCs nutzen möchten, dann müssen Sie beide Dateien zusammen dorthin kopieren. Und OpenOffice muss dort natürlich auch installiert sein.

    Damit die OpenOffice-Datei die Access-Datenbank auf anderen PCs problemlos wiederfindet, sollte der Speicherort immer gleich sein, z.B. "C:\Programme\IhrDatenbankName". Wenn OpenOffice die Access-Datei nicht wiederfindet, müssen Sie den Speicherort über das Menü Bearbeiten/Datenbank/Eigenschaften korrigieren.
    17.05.08 @ 12:16
    Kommentar von: Adrian [Besucher] E-Mail
    Hallo, ich verwende NetBeans IDE 6.1 Die Anweisungen habe strickt abgearbeitet. Erster Unterschied, der mit aufgefallen ist: Wie in Bild "Hier die neue Projektübersicht:" sieht es bei mir nicht aus. Nach Hauptfenster.java folgt kein weiterer Zweig - einfach nichts. Die scrollTabelle kann ich lediglich im Inspector sehen. Nachdem ich den QuellCode eins zu eins übernommen habe, erscheint allerdings nur ein graues Fenster 800x200. Die Tabelle erscheint nicht. Output: init: deps-jar: Compiling 1 source file to C:\Dokumente und Einstellungen\AKollmann\Eigene Dateien\NetBeansProjects\MELMIL\build\classes Note: C:\Dokumente und Einstellungen\AKollmann\Eigene Dateien\NetBeansProjects\MELMIL\src\gui\Hauptfenster.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. compile: run: Connection Successful BUILD SUCCESSFUL (total time: 8 seconds)
    06.08.08 @ 15:46
    Kommentar von: jrt [Mitglied] E-Mail
    Vielleicht hast Du im package "gui" statt einem neuen "JFrame Form" nur eine ganz normale Java-Klasse angelegt. Das würde das Fehlen aller untergeordneten Punkte erklären. Der ganze grafische Editor für Swing-Benutzeroberflächen funktioniert nur in einem JFrame Form.
    06.08.08 @ 18:49
    Kommentar von: Matteo [Besucher]
    Super! Das Tutorium ist echt spitze. Ich bastel eben ein wenig an einer Idee und wollte schnell was mit Access nud Tabellen testen, und es läuft direkt. Ich bin begeistert.
    07.09.08 @ 10:47
    Kommentar von: Trummer Thomas [Besucher]
    Hallo, ich arbeite jetzt schon seit einiger Zeit mit Java und Accessdatenbanken. EIn Problem habe ich bis heute jedoch noch nicht lösen können.
    Z.B. Habe ich ein kleines Programm das sehr viele Daten hintereinander in die Datenbank schreibt, jedoch bekomme ich hin und wider diesen Fehler: An unexpected error has been detected by Java Runtime Environment:.
    Dieser Fehler tritt ungefähr jedes 10mal auf, auch auf wenn ich immer die gleichen Daten lade.

    Hier ist mein Aufbau:
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + datenbank, "", "");
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    rs=stmt.executeQuery("SELECT * FROM ...");
    for(...)
    {
    rs.moveToInsertRow();
    rs.updateString(..,..);
    rs.insertRow();
    }

    Ich hoffe mir kann jemand helfen.
    mfg Tom
    11.04.09 @ 12:55
    Kommentar von: jrt [Mitglied] E-Mail
    Hallo Thomas,

    sicher bin ich mir nicht, aber es könnte an der Zeile

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

    liegen. Die beiden Einstellungen in der Klammer erfordern einen JDBC2-kompatiblen Datenbanktreiber.

    Vielleicht hilft diese Beschreibung weiter: http://www.herongyang.com/jdbc/JDBC-ODBC-MS-Access.html

    Da ist ein Beispiel dabei, in dem auf die zusätzlichen Parameter ganz verzichtet wird:

    Statement sta = con.createStatement();

    11.04.09 @ 18:34
    Kommentar von: Trummer Thomas [Besucher]
    Hallo jrt,

    ich hab die Variante mit Statement stmt = con.createStatement(); versucht. Jetzt habe ich leider ein neues Problem.
    Wenn ich z.B. rs.first(); aufrufe kommt jetzt dieser Fehler: Result set type is TYPE_FORWARD_ONLY
    Hast du dazu vielleicht auch eine Idee.

    mfg Tom
    11.04.09 @ 22:01
    Kommentar von: jrt [Mitglied] E-Mail
    In diesem Forenbeitrag
    http://coding.derkeiler.com/Archive/Java/comp.lang.java.databases/2005-02/0164.html
    heißt es, dass man per ODBC gar kein first() nutzen kann. Die JDBC-ODBC-Bridge ist ja auch nur eine "Krücke", kein vollwertiger Datenbanktreiber.
    Sun hat da eine kleine Datenbank für richtige Treiber: http://developers.sun.com/product/jdbc/drivers
    Ich setze Access übrigens nur noch dann ein, wenn ich Daten aus alten Tools importieren muss. Ansonsten bevorzuge ich MySQL, Derby, HSQLDB oder db4o - alle kostenlos zu bekommen...
    12.04.09 @ 10:44
    Kommentar von: Hannes [Besucher]
    Hallo!
    Ich habe OpenOffice Base und damit eine Datenbank erstellt. Ich möchte mit java darauf zugreifen.
    Habe gelesen, dass Base auf HSQL-Basis funktioniert. kann aber mit dem java-hsql driver nicht darauf verbinden.

    Gibt es irgendeine Möglichkeit, dass ich mit java an die Base-DB rankomme? (*.odb)???

    Vielen Dank!
    Hannes
    16.05.09 @ 19:14
    Kommentar von: jrt [Mitglied] E-Mail
    Hallo Hannes, hier eine Anleitung für odb:
    http://programmaremobile.blogspot.com/2009/01/java-and-openoffice-base-db-through.html
    17.05.09 @ 09:59
    Kommentar von: Harald Steinbichl [Besucher]
    Hallo Herr Thies,

    Ich bin auf ihr Tutorial gestoßen, als ich suchte, wie man eine Access DB mit JDBC anbinde.

    Ich würde die grafischen Elemente in eine eigene Klasse bzw. Packet auslagern.

    Und wichtig ist noch, dass sie bei ihrem Codebeispiel vergessen haben die DB-Verbindung wieder zu schließen:

    con.close();

    Also nur als kleine Anregung

    Mir ist auch aufgefallen, dass der <= (kleinergleich)Operator auf der Website als [lt]= dargestellt wird.

    Sonst finde ich das Tutorial sehr gut. Ich habe mich gleich ausgekannt.

    MfG Harald


    03.07.09 @ 22:46
    Kommentar von: jrt [Mitglied] E-Mail
    @H. Steinbichl:
    Vielen Dank für Ihre Hinweise! Das Problem mit dem Kleiner-Zeichen muss durch umkopieren des Codes in die formatierte Version passiert sein. Ist korrigiert, ebenso das con.close().
    04.07.09 @ 12:30
    Kommentar von: Jule [Besucher]
    Vielen danke für dieses wunderbare Tutoria.
    Obwohl mittlerweile unter NB 6.9 läuft alles einwandfrei und ist bestens erklärt.
    Es war mir ein idealer Einstieg um mit
    meiner Access Db zu "reden".
    19.07.10 @ 21:07

    Kommentare sind für diesen Eintrag deaktiviert.

    ©2012 by Jean-René Thies

    Kontakt |