Wie auf MS-Access DB zugreifen?

Status
Nicht offen für weitere Antworten.

ernst

Top Contributor
Hallo allerseits,
Zu Testzwecken will ich auf eine Access-Datenbank zugreifen.
Ich habe mit MS-ACCESS eine einfache Datenbank demoDB1.MDB angelegt
und eine Tabelle erzeugt.

Leider gibt es schon bei der Anwesiung
demoDB1Connection =
DriverManager.getConnection(datenQuelle,"","");
die folgende Fehlermeldung:
[Microsoft][ODBC Microsoft Access Driver] Datei '(unbekannt)' nicht
gefunden.

Fragen:
1) Was muss ich machen, damit diese Fehlermeldung nicht mehr passiert?
(Ich habe keine Datenbank-Treiber oder Ähnliches installiert, da ich
gelesen habe, dass mit der Lösung (siehe unten) "keine DSN über die
Systemsteuerung eingerichtet werden muss".
Wo bekommt man die "Microsoft-Access-Treiber" her, falls sie benötigt
werden?
Ich denke, dass bei der Installation von MS-Access auch die Treiber
installiert werden, oder was muss man da noch machen?

2)
Müssen die Buchstaben im Datenpfad alle groß geschreiben werden?
also:
C:/DEMODB1.MDB

mfg
Ernst

------------------------------------------------
Code:
import java.sql.*;

public class MainDB1 {
  public static void main(String[] args) {
    String datenQuelle;
    Connection demoDB1Connection;
    Statement StatementSQL;
    ResultSet resultSet;
    String AbfrageSQL;
		
    try{ 
// Lädt die Klasse mit dem Namen "sun.jdbc.odbc.JdbcOdbcDriver"
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// getConnection(...) benötigt 3 Parameter:
// eine Datenquelle, einen User, ein Passwort
// eine Datenquelle ist wie folgt aufgebaut:
// jdbc:Subprotokoll:Datenquellennamen
// Für ODBC-Datenquellen ist das Subprotokoll obcd
// 
      datenQuelle = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:/DEMODB1.MDB";	    	
// getConnection(...) liefert die Verbindung zur Datenbank zurück.
// obenstehender Pfad muss jeweils angepasst werden!
      demoDB1Connection =  
               DriverManager.getConnection(datenQuelle,"","");
// Um Anfragen an die Datenbank stellen zu können benötigt man ein
// Objekt der Klasse Statement
      StatementSQL = demoDB1Connection.createStatement();
      AbfrageSQL = "SELECT Nr, Bezeichnung, Bestand FROM Artikel1 ";
      AbfrageSQL = AbfrageSQL + "WHERE Nr = '1000';";
      resultSet = StatementSQL.executeQuery(AbfrageSQL);
      resultSet.close();
      StatementSQL.close();
      demoDB1Connection.close();	    	
    }
    catch (ClassNotFoundException fehler){
      System.out.println("DB konnte nicht geöffnet werden");	    	
      fehler.printStackTrace();
    }
    catch (SQLException fehler){
      System.out.println("DB konnte nicht geöffnet werden");	    	
      fehler.printStackTrace();
    }
  }
}
----------------------------------------------------------------------------
 
Hast du die Datenquelle unter System Steuerung/Verwaltung/Datenquellen (ODBC) hinzugefügt?
 
Niki hat gesagt.:
Hast du die Datenquelle unter System Steuerung/Verwaltung/Datenquellen (ODBC) hinzugefügt?
Nein, denn ich habe gelesen, dass mit der Lösung (siehe unten) "keine DSN über die
Systemsteuerung eingerichtet werden muss".

mfg
Ernst
 
Also ich mach das so:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// set this to a MS Access DB you have on your machine
String database = "jdbc😱dbc😀river={Microsoft Access Driver (*.mdb)};DBQ=";
database += "bla.mdb"
+ ";DriverID=22;READONLY=true}"; // add on to the end
// now we can get the connection from the DriverManager
con = DriverManager.getConnection(database, "", "");
stmt = con.createStatement();
// pstmt = con.prepareStatement(sql);
pstmt_sitData =
// "Datenbankverbindung hergestellt");
 
Gast hat gesagt.:
Also ich mach das so:

String database = "jdbc😱dbc😀river={Microsoft Access Driver (*.mdb)};DBQ=";
database += "bla.mdb"
+ ";DriverID=22;READONLY=true}"; // add on to the end

Das ist so ähnlich, wie ich es gemacht habe.
Ich habe durch Tests folgendes festgestellt:
Deine und meine Lösungen funktionieren _nicht_ bei Datenbanken, die ich mit MS-Access erstellt habe.
Wenn ich dagegen eine _bestimmte_ Datenbank nehme, die mir jemand mal gegeben hat
(und der diese mit MS-Access erstellt hat), dann funktioniert deine und meine Lösung.
Was hat der Mensch wohl bei der Erstellung der Datenbank mit MS-Access noch gemacht, was ich nicht gemacht habe?

Bem:
Ich habe keine DNS über die Systemsteuerung eingerichtet.

mfg
Ernst
 
Auf jeden Fall solltst du darauf achten, dass du im Code den Dateinamen der Datenbankdatei richtig schreibst. (Groß-/Kleinschreibung. Im Verlauf des Threads hast du bereits zwei verschiedene Schreibweisen benutzt. Prüfe das mal.

Mit der vorgeschlagenen Variante ist kein Treiber notwendig (es gibt auch keinen). Auch ein Eintrag in den ODBC-Quellen ist damit nicht notwendig.
 
L-ectron-X hat gesagt.:
Auf jeden Fall solltst du darauf achten, dass du im Code den Dateinamen der Datenbankdatei richtig schreibst. (Groß-/Kleinschreibung. Im Verlauf des Threads hast du bereits zwei verschiedene Schreibweisen benutzt. Prüfe das mal.

Mit der vorgeschlagenen Variante ist kein Treiber notwendig (es gibt auch keinen). Auch ein Eintrag in den ODBC-Quellen ist damit nicht notwendig.

Stimmt! Du hast recht!
Ich habe laufend an einer falschen Stelle nach dem Fehler gesucht.
Allerdings ist bei mir egal, ob ich groß oder klein schreibe.
Ich habe einen falschen Buchstaben geschrieben.
Vielen Dank an alle.
Jetzt kann ich wieder weiterprogrammieren.

mfg
Ernst
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben