| « Tutorial: JavaHelp erzeugen und in Java-Applikationen einbinden | Basic for Beginners » |
Tutorial: Access-Datenbank-Zugriff mit Java programmieren
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!
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
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]
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.
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]
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]
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
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]
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();
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
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]
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...
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
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]
Hallo Hannes, hier eine Anleitung für odb:
http://programmaremobile.blogspot.com/2009/01/java-and-openoffice-base-db-through.html
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
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]
@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().
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".
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.