# ODBC Treiber Problem/oder unvermögen



## schiksi (28. Feb 2012)

Hallo an euch,

ich habe folgendes Problem und zwar versuche ich für ein Projekt einen Sportartikelversand zu erstellen. 
Dieser soll Kunen Artikel usw. in einer DB abspeichern können bzw. Daten draus laden. 
Nun bekomme ich es nicht hin die Datenbank mit meinem code zu verknüpfen...hab in Access eine Tabelle Kunde mit 50 Kunden erstellt die die mdb heißt "ln1_kirn". 
Mein code um Daten aus der DB zu holen ist folgender


```
public class Datenbankübertragung {
    public static final String TREIBER="sun.jdbc.odbc.JdbcOdbcDriver";
    public static final String URL="jdbc:odbc:ln1_kirn";

public static void fromDB() throws SQLException, ClassNotFoundException {
       Connection myCon=null;
       Statement myStmt=null;
       String sql2;
       ResultSet rset=null;
       sql2="Select * from Kunde";
       try {
           Class.forName(TREIBER);
           myCon = DriverManager.getConnection(URL);
           myStmt=myCon.createStatement();
           rset=myStmt.executeQuery(sql2);
           while(rset.next()){           
               
               Kunde meinKunde = new Kunde();
               meinKunde.setKD_Nr(rset.getInt("KundenNr"));               
               meinKunde.setFName(rset.getString("Firmenname"));
               meinKunde.setFName(rset.getString("Kontaktperson"));
               meinKunde.setKEmail(rset.getString("Email"));
               meinKunde.setKD_Tel(rset.getString("Telefon"));   
               meinKunde.setKD_Fax(rset.getString("Telefax"));  
               meinKunde.setKD_Plz(rset.getInt("PLZ"));  
               meinKunde.setKStraße(rset.getString("Strasse"));  
               Ablage.KundenListe.add(meinKunde);
               

           }                     
       }
       
       catch (SQLException e2){
           JOptionPane.showMessageDialog(null, "SQL Exception");
       }
       
       catch (ClassNotFoundException e3)
       {
           JOptionPane.showMessageDialog(null, "Class not Found Exception");
       }
       
       finally{
           try{
               rset.close();
               myStmt.close();
               myCon.close();
               JOptionPane.showMessageDialog(null, "Alle Kunden wurden ausgelesen");
           }
           catch(Exception e){
               JOptionPane.showMessageDialog(null, "SQL-Fehler beim Speichern");
           }
       }}
```
ich bekomme immer die SQL Exception und SQL-Fehler beim Speichern.

in Ablage habe ich einen KundenListe Array geschrieben, falls dass noch von notwendigkeit für euch ist.
System hab ich einen Dell xps win 7 64bit.

Vielen Dank schonmal


----------



## xehpuk (29. Feb 2012)

Dann lass dir die Exceptions doch ausgeben. "SQL-Fehler beim Speichern" wird wohl eine NullPointerException sein.


----------



## schiksi (29. Feb 2012)

okay dann muss ich  mal schauen, wie ich die exception mir ausgeben lasse.
aber das andere problem ist, dass ich ja sehen würde wenn er auf die datenbank zugreifen würde. jedoch ändert der nichts an der db. zumindest zeigt mir das, dass veränderungsdatum der datenbank datei...also ich befürchte der baut erst gar keine verbindung auf =( wenn ich etwas reinschreiben will gibt er mir "sql fehler beim speichern:[Microsoft][odbc driver manager]der angegebene dsn weist eine nicht übereinstimmende architektur von treiber und anwendung auf" jedoch lad ich den treiber in der C:\Windows\SysWOW64\odbcad32.exe..


----------



## schiksi (29. Feb 2012)

also hat jetzt beim rauslesen diese fehler wie beim einlesen ich oben schon geschriebn hab :

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der angegebene DSN weist eine nicht ?bereinstimmende Architektur von Treiber und Anwendung auf.

java.lang.NullPointerException

hab sie mit "System.err.println(e);" bzw "System.err.println(e2);" auslesen lassen


----------



## Camino (29. Feb 2012)

schiksi hat gesagt.:


> also hat jetzt beim rauslesen diese fehler wie beim einlesen ich oben schon geschriebn hab :
> 
> java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der angegebene DSN weist eine nicht ?bereinstimmende Architektur von Treiber und Anwendung auf.



Keine Ahnung, aber wenn ich danach im Internet suche, erhalte ich folgenden Treffer mit Lösungsmöglichkeit: 

Windows 7 64-Bit und ODBC Treiber für Access – Endlich gelöst | Thomas Schiffler - Individuelle Softwareentwicklung

Vielleicht hilft dir das ja irgendwie weiter. Hat vermutlich was mit dem Treiber oder dem URL-String zu tun...



> java.lang.NullPointerException



Vielleicht wird dir ja auch angezeigt, wo diese NullPointerException auftritt. Wahrscheinlich ist es ein Folgeproblem von dem Treiberproblem weiter oben.


----------



## schiksi (29. Feb 2012)

habs jetzt gerade mal an meinem uralt 32 bit xp rechner ausprobiert. da gibt er mir nur noch eine null point exception bei fehler sql exception... =(


----------



## schiksi (29. Feb 2012)

habe das problem mit der verbindung, jetzt schluss endlich gelassen, da es wohl auch andere nur mit 32 bit systemem lösen und unser prof auch nur damit handiert. 
jetzt habe ich noch das problem, dass er mir sagt:

java.sql.SQLException: Column not found

habe die zeilen mit der meiner Access datenbank verglichen und es passt eigentlich...


```
public static void fromDB() throws SQLException, ClassNotFoundException {
       Connection myCon=null;
       Statement myStmt=null;
       String sql2;
       ResultSet rset=null;
       sql2="Select * from Kunde";
       try {
           Class.forName(TREIBER);
           myCon = DriverManager.getConnection(URL);
           myStmt=myCon.createStatement();
           rset=myStmt.executeQuery(sql2);
           while(rset.next()){           
               
               Kunde meinKunde = new Kunde();
               meinKunde.setKD_Nr(rset.getInt("KundenNr"));               
               meinKunde.setFName(rset.getString("Firmenname"));
               meinKunde.setFName(rset.getString("Kontaktperson"));
               meinKunde.setKEmail(rset.getString("Email"));
               meinKunde.setKD_Tel(rset.getString("Telefon"));   
               meinKunde.setKD_Fax(rset.getString("Telefax"));  
               meinKunde.setKD_Plz(rset.getInt("PLZ"));  
               meinKunde.setKStraße(rset.getString("Straße"));  
               Ablage.KundenListe.add(meinKunde);
               

           }                     
       }[/Java]
```


----------



## Camino (29. Feb 2012)

schiksi hat gesagt.:


> java.sql.SQLException: Column not found
> 
> habe die zeilen mit der meiner Access datenbank verglichen und es passt eigentlich...



Wird dir da nicht angezeigt, welche Column er nicht findet? Musst du nochmal genauer nachschauen, weil irgendeine Spalte in deiner Tabelle wird nicht gefunden. Vielleicht ein Schreibfehler irgendwo?


----------



## schiksi (29. Feb 2012)

gibts da ne bestimmte anweisung, dass ich das bestimmte column auslesen kann


----------



## Camino (29. Feb 2012)

Ich dachte eigentlich, dass die SQLException die fehlerhafte column mit anzeigt. Hmm, du musst halt wirklich nochmal alles auf Schreibfehler durchschauen (Gross-/Kleinschreibung auch beachten)...

Evtl. musst du dir mal von der SQLException mit getSQLState und getErrorCode noch weitere Infos ausgeben lassen.


----------



## schiksi (29. Feb 2012)

Das bekomm ich als Fehler für state und error code...

java.sql.SQLException: Column not found
SQL state: S0022
Vendor code: 0


----------



## schiksi (29. Feb 2012)

die richtige schreibweise in access und im programm müsste stimmen außer ich hab augenkrebs =(


----------



## Camino (29. Feb 2012)

Hmm, wie gesagt, die Fehlermeldung weist eigentlich darauf hin, dass eine angeforderte Spalte nicht exisitert, also entweder garnicht vorhanden oder falsch geschrieben. Das müsste sich doch eigentlich sicher überprüfen lassen. Ansonsten würde mir noch einfallen, alle Spaltenabfragen erstmal wieder rauszunehmen und nur mit einer anzufangen, diesen Wert dann testweise auf der Konsole auszugeben und nach und nach die anderen Spalten zu der Abfrage hinzufügen. Und dann schauen, ab wann der Fehler auftritt...


----------



## schiksi (29. Feb 2012)

erstmal danke für deine bisherigen bemühungen =)

also ich hab test halber mal einen kunden in meine tabelle schreiben lassen, da hat es alles aus der tabelle gelöscht und ihn eingefügt. das komische ist, dass er die kontaktperson nicht reinschreibt. möglich dass hier der fehler ist? der debugger gibt den fehler er beim add Kunde fehler...geht der womöglich alles durch obwohl er schon einen fehler hat und erst wenn er ihn in die tabelle schreibt gibt er den fehler aus?


----------



## Camino (29. Feb 2012)

Vielleicht liegt es daran:

```
...
Kunde meinKunde = new Kunde();
meinKunde.setKD_Nr(rset.getInt("KundenNr"));               
meinKunde.setFName(rset.getString("Firmenname"));
meinKunde.setFName(rset.getString("Kontaktperson"));
...
```
Du schreibst sowohl den Firmenname als auch die Kontaktperson bei Kunde nach FName...

Wer weiss, vielleicht hast du auch woanders noch solche ähnlichen Fehler...


----------



## schiksi (29. Feb 2012)

hey das mit dem fname hab ich auch grad bemerkt...
hat aber das problem leider nicht gelöst...
bin die einzelnen rset dingern nochmal mit dem debugger durchgegangen und er macht bei keinem die sql exception erst wenn ich nach dem er auf straße war, dem letzten und ich dann noch einen schritt weiter geh die exception


----------



## xehpuk (29. Feb 2012)

Liegt vielleicht am Encoding. "Straße" enthält ja ein Eszett.

Wenn möglich, sollte man solche Zeichen vermeiden.


----------



## Camino (29. Feb 2012)

Hmm, vielleicht hängt es ja mit dem ß in Straße zusammen?
Uuups, war zu langsam...


----------



## schiksi (29. Feb 2012)

vielen vielen dank schon mal!!! kann jetzt die Kunden perfekt aus der db auslesen. 

es lag an dem ß...
4 stunden sinnlos verschwendet und an sich selbst gezweifelt...

Vielen vielen dank!


----------

