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

    Hier nochmal der ganze Code (auch als Datei zum Download):

    Code:

    /*
    * Hauptfenster.java
    *
    */
     
    package gui;
     
    import java.sql.Statement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Vector;
    import javax.swing.JTable;
     
     
    public class Hauptfenster extends javax.swing.JFrame {
        
        /** Konstruktor: Hauptfenster erzeugen */
        public Hauptfenster() {
            initComponents();
            aktualisiereTabelle();
        }
        
        /** Tabelleninhalte holen und Tabelle erzeugen **/
        private void aktualisiereTabelle() {
            Vector columnNames = new Vector();
            Vector data = new Vector();
            try{
                //Abfrage definieren
                String query = "SELECT * FROM adressen;";
                //Datenbankverbindung herstellen
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/tutorial/kontakte.mdb","","" );
                System.out.println("Connection Successful ");
                Statement stmt = con.createStatement();
                ResultSet rst = stmt.executeQuery(query);
                ResultSetMetaData md = rst.getMetaData();
                int columns = md.getColumnCount();
                //  Spaltennamen ermitteln
                for (int i = 1; i <= columns; i++) {
                    String colname=md.getColumnName(i);
                    columnNames.addElement( colname );
                }
                //  Zeileninhalt ermitteln
                while (rst.next()) {
                    Vector row = new Vector(columns);
                    for (int i = 1; i <= columns; i++) {
                        row.addElement( rst.getObject(i) );
                    }
                    data.addElement( row );
                }
                rst.close();
                stmt.close();
                con.close();
            } catch(Exception e) {
                e.printStackTrace();
            }
            //  Tabelle erzeugen
            JTable table = new JTable(data, columnNames);
            scrollTabelle.setViewportView(table);
        }
        
                              
        private void initComponents() {
            scrollTabelle = new javax.swing.JScrollPane();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            getContentPane().add(scrollTabelle, java.awt.BorderLayout.CENTER);
     
            java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((screenSize.width-800)/2, (screenSize.height-200)/2, 800, 200);
        }                        
        
        /**
         * MAIN-Methode
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Hauptfenster().setVisible(true);
                }
            });
        }
        
        // globale Variablendeklaration                      
        private javax.swing.JScrollPane scrollTabelle;
                      
        
    }

    Und so sieht unser nur 4 KB großes Java-Programm aus:

    Weitere Schritte
    Klar, damit ist es nicht getan. Die Daten müssen auch bearbeitet werden können. Also ran, die weiteren Details überlasse ich Euch!

    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

    Der Eintrag hat ein auf Moderation wartendes Feedback...

    Kommentare sind für diesen Eintrag deaktiviert.

    ©2010 by Jean-René Thies

    Kontakt |