# Verbindung zu Access Datenbank



## JaninaSt (21. Aug 2012)

Hallo!

Ich habe mir von folgendem Link:

Download: Microsoft Access Database Engine 2010 Redistributable - Microsoft Download Center - Download Details

Microsoft Access Database Engine 2010 runtergeladen 

und möchte nun mittels Java (Eclipse) eine Verbindung zu einer Datenbank erstellen.

Code: 


```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class Main {

	public static void main(String[] args) {
		
		try {
		      	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		} catch (Exception e) {
		    	System.out.println("JDBC-ODBC driver failed to load.");
		    	return;
		}

	    try {
	    	
	    	Connection con = DriverManager.getConnection("jdbc:odbc:Test", "", "");
	    	Statement stmt = con.createStatement();
	    	stmt.execute("CREATE TABLE SalesHistory(ProductID NUMBER,Price CURRENCY, TrnsDate DATE)");
	    	stmt.close();
	    	con.close();
	    } catch (Exception e) {
	    	System.out.println(e);
	    }
	}
}
```

Folgende Fehlermeldung bekomme ich:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben

Kann mir jemand sagen was ich falsch mache? Oder fehlt mir noch ein Treiber?

Vielen Dank schon mal für eure Hilfe.


----------



## Michael... (21. Aug 2012)

Ob der Download dafür nötig war?

Du versuchst mit dem Sun Treiber über die ODBC Schnittstelle auf die Datenbank zu zugereifen, dazu muss die Access DB als ODBC Datenquelle mit dem Namen Test im Betriebssystem eingerichtet sein.
Das passt soweit und die Verbindung lässt sich da erfolgreich aufbauen?


----------



## JaninaSt (21. Aug 2012)

Ok danke schon mal, das heißt ich muss unter den Systemsteuerungen eine neue Datenquelle anlegen die dann hier zum Beispiel den Namen "Test" erhalten würde.

Wenn ich unter Systemsteuerungen zum ODBC Datenquellen Administrator gehe und unter System-DSN eine neue hinzufügen möchte kann ich aber nur einen SQL Server oder SQL Native Client als Treiber auswählen.. Da sollte ja aber eigentlich auch ein MS Access Treiber drinnen sein, den ich hier ja auswählen muss oder?

Oder ist der vorher zu installieren?


----------



## L-ectron-X (22. Aug 2012)

Es geht auch ohne ODBC Datenquelle.
Datenbankverbindung (Java) ? Byte-Welt Wiki

Oder du machst das mit einem plattformunabhängigen Treiber: Java Library for MS Access


----------



## JaninaSt (3. Sep 2012)

Ich hätte jetzt den Weg ohne ODBC Quelle probiert, da bekomme ich folgende Meldung:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben

Der Code ist genau der von dem im vorigen Beitrag erwähnten Link:


```
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
      + filename + ";READONLY=false}";      
 
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   con = DriverManager.getConnection(url, user, passwd);
```

Welchen Fehler mache ich? Hat wer ne Idee?


----------



## OSBI_Fan (3. Sep 2012)

Hallo JaninaSt,

Eintragungen für den Access-Datenbank-Zugriff mit Java:

*Name:* JDBC-ODBC-Bridge (Variante mit Registrierung der ODBC Datenquellen)
*Driver:* sun.jdbc.odbc.JdbcOdbcDriver
*Database URL:* jdbcdbc:[noparse]Driver[/noparse]={Microsoft Access Driver (*.mdb)};DBQ=C:/test.mdb

*Achtung:* Bei der Pfadangabe zur ACCESS-Datenbank keine Backslashes (\), sondern Slashes (/) verwenden!

Die Felder "User Name" und "Password" bleiben in diesem Fall leer.

P.S. Da bei der URL ein Smiley eingetragen wurde habe ich: "Driver" <-> "driver" geändert.
[EDIT]Edit by L-ectron-X:


> P.S. Da bei der URL ein Smiley eingetragen wurde habe ich: "Driver" <-> "driver" geändert.


Bei solchen Problemen den kritischen Teil mit [noparse][noparse][/noparse]-Tags umhüllen.
Hab das mal für dich oben gemacht.[/EDIT]

Grüße
OSBI_Fan

OSBI = Open Source Business Intelligence


----------



## JaninaSt (4. Sep 2012)

Aber wenn ich bei der URL DBQ=C:/test.mdb hinten dran hab, heißt das die Datenbank mit dem Namen test muss hier schon existieren oder?

Was ist wenn ich die Datenbank aber auch mit Java erzeugen möchte, also eine komplett neue anlegen möchte?


----------



## Michael... (4. Sep 2012)

Ja, die Datei muss existieren. Wenn man einen neue erzeugen will, bleibt aus Java heraus eigentlich nur die Möglichkeit eine bestehende (Vorlage) zu kopieren.


----------



## tfa (4. Sep 2012)

> Was ist wenn ich die Datenbank aber auch mit Java erzeugen möchte, also eine komplett neue anlegen möchte?


Muss es wirklich Access sein? Oder kannst du auch was anderes nehmen? Den größten Gefallen tut man sich, wenn man Access in die Tonne kloppt und eine vernünftige DB einsetzt.


----------



## JaninaSt (4. Sep 2012)

@Michael: Ok, danke. Dachte eigentlich es ist auch möglich eine neue zu erzeugen.

@tfa: Ja, die Frage hör ich öfters  Aber ja, muss Access sein.


Ich schaffs aber immer noch nicht eine Verbindung aufzubauen...


```
import java.sql.Connection;
import java.sql.DriverManager;


public class Main {

	private static Connection con;

	public static void main(String[] args) {
		
			try{
				String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Testdatenbank.mdb";
				//laden der Treiberklasse
				Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
				//zurückgeben der neuen Verbindung
				con = DriverManager.getConnection(url);
				   
			} catch(Exception e){
					e.printStackTrace();
			}
	}
	
}
```

Immer die Fehlermeldung das der Datenquellenname nicht gefunden wurde und kein Standardtreiber angegeben wurde....


----------



## OSBI_Fan (4. Sep 2012)

Hallo JaninaSt,		

versuch mal folgendes:


```
//Datenbankverbindung herstellen
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Testdatenbank.mdb","","" );
System.out.println("Connection Successful ");
```
Und wichtig ist auch, die DB-Verbindung wieder zu schließen:


```
con.close();
```
Grüße
OSBI_Fan

OSBI = Open Source Business Intelligence


----------



## JaninaSt (10. Sep 2012)

Leider immer noch die selbe Fehlermeldung.

Vielleicht hats da was anderes, weil wenn ich auf den ODBC Datenquellen Administrator gehe und da dann auf die MS Access Database einen Doppelklick mache steht da dass der ODBC Treiber nicht gefunden werden kann und ich den Treiber neu installieren soll...

Oder aber müsst das ja eigentlich egal sein weil ich ja eh die Variante ohne ODBC Datenquelle verwende so wies jetzt aktuell eingebunden ist, oder?

Also ich bin ratlos was ich noch probieren kann.


----------



## JaninaSt (10. Sep 2012)

Ok, ich hab jetzt eine ODBC Quelle eingerichtet.

Mein Java Code:


```
private static Connection getConnection() throws Exception {
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String url = "jdbc:odbc:db1";
    String username = "";
    String password = "";
    Class.forName(driver);
    return DriverManager.getConnection(url, username, password);
  }
```

Jetzt bekomme ich die Meldung:

[Microsoft][ODBC Driver Manager] Der angegebene DSN weist eine nicht übereinstimmende Architektur von Treiber und Anwendung auf.

Ich habe einen 64 Bit Rechner, habe aber eine 32 Bit Access Version installiert.

Kanns sein, dass es da Probleme gibt?

Die ODBC Datenquelle hab ich folgendermaßen eingerichtet:

Unter C:\Windows\SysWOW64 habe ich die Datei odbcad32.exe (Das ist die 32Bit Datei) ausgeführt und dann eine Datenquelle mit dem Namen db1 angelegt. 

Dann sollts doch eigentlich auch gehen...


----------



## JaninaSt (12. Sep 2012)

Also das Problem ist tatsächlich, dass ich einen 64 Bit Rechner habe, die Access Version aber eine 32 Bit ist.

Deshalb kann ich auch nur einen 32 Bit Treiber installieren, da lässt sich natürlich immer nur der installieren welcher von den Bit her gleich ist wie die Office Version was drauf ist.

Zugegriffen wird aber nur auf den 64 Bit Treiber, darum kann man ihn auch nicht finden wenn man mit Java folgendes ausführt.


```
[...]
private static Connection getConnection() throws Exception {
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    //String url = "jdbc:odbc:data";
    String url = "jdbc:odbc:Driver=(Microsoft Access-Treiber (*.mdb));DBQ=D:/data.mdb";
    String username = "";
    String password = "";
    Class.forName(driver);
    return DriverManager.getConnection(url, username, password);
  }
[...]
```

Falls mal wer das selbe Problem hat:

Werde mir jetzt einen XP Mode auf mein Notebook runterladen, dass sollt mit 32 Bit laufen und so sollts auch funktionieren, weil dann eben alles mit 32 Bit läuft.


----------



## janina11 (25. Okt 2012)

Hallo..

Ich habe genau das selbe Problem. 
Allerdings lief das Ganze vor einiger Zeit schon einmal auf einem 64Bit Rechner mit 32Bit Access.


Hat jemand noch eine andere Idee, woran es liegen könnte?


----------



## L-ectron-X (25. Okt 2012)

Welches Problem? Es wurden in diesem Thema mehrere behandelt/besprochen. 
Auf welches Problem also beziehst du dich?


----------

