# Ich dreh durch mit JDBC & ODBC!



## Anyone (7. Dez 2009)

Erstmal folgender Code:


```
public static Connection createConnection(String driver, String url)
    {
        // Datenbankverbindungsveriable
        Connection linkID = null;

        try
        {
            // Initiierung des JDBC-Treibers
            Class.forName(driver).newInstance();
        }
        catch (Exception e) // Der JDBC-Treiber konnte nicht initiiert werden.
        {
            e.printStackTrace();
        }

        try
        {
            // Versuch, eine Datenbankverbindung zu initiieren
            linkID = DriverManager.getConnection("jdbc:odbc:" + url);
        }
        catch (SQLException e) // Die Datenbankverbindung konnte nicht aufgebaut werden.
        {
            e.printStackTrace();
        }

        // Die Datenbankverbindung wird zurückgeliefert
        return linkID;
    }
```

Wenn ich nun folgenden Code aufrufe:


```
ConnectionFactory.createConnection("sun.jdbc.odbc.JdbcOdbcDriver", "C:\\Users\\X\\Desktop\\Autoverleih\\autoverleih2003.mdb");
```

Kommt die Exception:



> Der Datenquellenname ist zu lang



What the fuck? Entweder werde ich durch meinen derzeitigen Schlafentzug unaufmerksam, oder ich habe irgendwas vergessen... Könnt ihr mir bitte weiterhelfen? Danke.


----------



## frapo (7. Dez 2009)

Vielleicht den Datenquellnamen kürzen? 

z.B in deinem Projekt einen Unterordner mit dem Namen data, db oder sonstwas erstellen, mdb da hinein kopieren, und dann die URL mit der relativen Pfadangabe zur mdb angeben.


----------



## Anyone (7. Dez 2009)

frapo hat gesagt.:


> Vielleicht den Datenquellnamen kürzen?
> 
> z.B in deinem Projekt einen Unterordner mit dem Namen data, db oder sonstwas, mdb da hinein kopieren, und dann die URL mit der relativen Pfadangabe der mdb angeben.



Whaaat?


```
ConnectionFactory.createConnection("sun.jdbc.odbc.JdbcOdbcDriver", "C:\\Users\\Andre\\Desktop\\Autoverleih\\a2003.mdb")
```

Selbiger Fehler tritt auf...


----------



## frapo (7. Dez 2009)

Es wird ja auch selbiger Pfad benutzt.. nur der mdb-Name wurde geändert.

Edit: du benutzt eine absolute Pfadangabe, versuchs mal mit einer relativen Pfadangabe - das sollte klappen.


----------



## Anyone (7. Dez 2009)

frapo hat gesagt.:


> Es wird ja auch selbiger Pfad benutzt.. nur der mdb-Name wurde geändert.
> 
> Edit: du benutzt eine absolute Pfadangabe, versuchs mal mit einer relativen Pfadangabe - das sollte klappen.



Und wie macht man relative Pfade bzw. das, was du versuchst mir zu erklären?


----------



## frapo (7. Dez 2009)

Absolute path and relative path : PathFileJava Tutorial


----------



## Anyone (7. Dez 2009)

```
ConnectionFactory.createConnection("sun.jdbc.odbc.JdbcOdbcDriver", new File("db\\a2003.mdb"))
```

Jetzt erscheint noch zusätzlich eine Meldung:


```
Der Datenquellenname wurde nicht gefunden und es wurde kein Standardtreiber angegeben.
```

Irgendwie komm ich mir gerade hintergangen von Java vor


----------



## maki (7. Dez 2009)

Wenn der Bauer nicht schwimmen kann, dann ist die Badehose schuld 

Mal ernsthaft, das hier:

```
"C:\\Users\\X\\Desktop\\Autoverleih\\autoverleih2003.mdb"
```
sieht falsch aus


----------



## Anyone (7. Dez 2009)

maki hat gesagt.:


> Wenn der Bauer nicht schwimmen kann, dann ist die Badehose schuld
> 
> Mal ernsthaft, das hier:
> 
> ...



Und wie wäre es deiner Meinung nach richtig?


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Und wie wäre es deiner Meinung nach richtig?



Also ich würde anstatt

```
"C:\\Users\\X\\Desktop\\Autoverleih\\autoverleih2003.mdb"
```

mal

```
"C:/Users/X/Desktop/Autoverleih/autoverleih2003.mdb"
```

versuchen, wenns dann nicht klappt, melde dich nochmal


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Also ich würde anstatt
> 
> ```
> "C:\\Users\\X\\Desktop\\Autoverleih\\autoverleih2003.mdb"
> ...



Kommt halt dieselbe Fehlermeldung wie zuvor, dass der Datenquellenname zu lang ist.


----------



## U2nt (7. Dez 2009)

Hm normalerweise liegt der maximale "Dateipfad" bei 255...

Kannst ja mal ausprobieren den Driver in den Classpath zu setzen, vielleicht findet er ihn nicht...


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Hm normalerweise liegt der maximale "Dateipfad" bei 255...
> 
> Kannst ja mal ausprobieren den Driver in den Classpath zu setzen, vielleicht findet er ihn nicht...



Ich dachte, dass es für Access standardmäßig einen Treiber gibt?


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Ich dachte, dass es für Access standardmäßig einen Treiber gibt?



Um in Java eine Verbindung zu Acces Datenbanken aufzubauen brauch man eine sogenannte "ODBC und JDBC Bridge". Der Driver ist beim Java SDK dabei (also der ODBC). Falls das nicht funktioniert sollteste das mal mit der Zeile hier ausprobieren:


```
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
```

(Jedoch muss dafür der Driver installiert sein!)


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Um in Java eine Verbindung zu Acces Datenbanken aufzubauen brauch man eine sogenannte "ODBC und JDBC Bridge". Der Driver ist beim Java SDK dabei (also der ODBC). Falls das nicht funktioniert sollteste das mal mit der Zeile hier ausprobieren:
> 
> 
> ```
> ...



Also "sun.jdbc.odbc.JdbcOdbcDriver" steht ja bereits drin, wie der Factory zu entnehmen ist.


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Also "sun.jdbc.odbc.JdbcOdbcDriver" steht ja bereits drin, wie der Factory zu entnehmen ist.



Dann schreib die Zeile einfach mal am Anfang deines Codes, probier es, und sag mir ob es geklappt hat oder net


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Dann schreib die Zeile einfach mal am Anfang deines Codes, probier es, und sag mir ob es geklappt hat oder net



Kommt immerhin keine Fehlermeldung. 

PS: Kann es nicht auch irgendwie magic sein?


----------



## U2nt (7. Dez 2009)

Das ist ja super 
Falls jedoch keine Verbindung zur Datenbank Fehler auftreten (Also du keine Datenbank bekommst) liegt es am restlichen Code


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Das ist ja super
> Falls jedoch keine Verbindung zur Datenbank Fehler auftreten (Also du keine Datenbank bekommst) liegt es am restlichen Code



Aber soweit müsste die ConnectionFactory doch korrekt arbeiten, oder sehe ich da etwas falsch?


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Aber soweit müsste die ConnectionFactory doch korrekt arbeiten, oder sehe ich da etwas falsch?



Nene alles gut, sag nur falls du ein weiteres Problem bekommst, liegt es wahrscheinlich das die Verbindung zur Datenbank (sprich ID etc.) falsch gesetzt sind.


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Nene alles gut, sag nur falls du ein weiteres Problem bekommst, liegt es wahrscheinlich das die Verbindung zur Datenbank (sprich ID etc.) falsch gesetzt sind.



Jo, aber damit ist das grundlegende Problem ja leider noch nicht aus der Welt geschaffen.  Fällt dir bzw. jemanden anderen nicht noch eine andere Möglichkeit ein?


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Jo, aber damit ist das grundlegende Problem ja leider noch nicht aus der Welt geschaffen.  Fällt dir bzw. jemanden anderen nicht noch eine andere Möglichkeit ein?



Ach kommt immernoch der Fehler, dass der Dateipfad zu lange ist?!


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Ach kommt immernoch der Fehler, dass der Dateipfad zu lange ist?!



Ja?


----------



## U2nt (7. Dez 2009)

Anyone hat gesagt.:


> Kommt immerhin keine Fehlermeldung.
> 
> PS: Kann es nicht auch irgendwie magic sein?



Hab ich den Post falsch interpretiert? Weil ich dachte damit meinst du, dass KEINE Fehlermeldung mehr kommt...


----------



## Anyone (7. Dez 2009)

U2nt hat gesagt.:


> Hab ich den Post falsch interpretiert? Weil ich dachte damit meinst du, dass KEINE Fehlermeldung mehr kommt...



Jo sorry, meinte, dass keine Fehlermeldung kommt, wenn man nur den Treiber lädt. ^^

PS: Ich hasse es, wenn magic in meinem System praktiziert wird. In Bezug auf MySQL hat alles(!) geklappt, aber für unser Schulprojekt müssen wir ja ausgerechnet Access benutzen. -.-


----------



## frapo (8. Dez 2009)

Hm, da bin ich auch überfragt. 

Mal eine dumme Frage.. 
	
	
	
	





```
ConnectionFactory
```
 ist doch aus JavaEE und nicht aus dem SDK oder? Habe mit EE bisher nicht viel gemacht.

Hast du einfach mal aus 'Spaß' versucht, eine Verbindung zu einer mdb nur per SDK zu machen? 

Vielleicht hilft dir ja dieses Beispiel dazu weiter: http://www.tutorials.de/forum/java/224223-access-datenbankverbindung.html


----------



## maki (8. Dez 2009)

> Und wie wäre es deiner Meinung nach richtig?


Anders 

Mal ernsthaft, Doku lesen gehört wohl nicht zu deinen Stärken,oder?
Das solltest du ändern, sonst wird da nix 

Frapos link enthält die Lösung:

```
"jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:/Programme/Microsoft Office/Office/Samples/Nordwind.mdb"
```


----------

