# Access Datenbankverbindung



## Marshallbbw (8. Oktober 2005)

Hallo, 

ich versuche eine Verbindung zu einer Access Datenbank zu erstellen. Aber irgendwie bekomme ich das nicht hin. Bin auch nicht wirklich der Krack in OOP und beginne gerade erst mit Java. 
Ich haber mit Access eine Datenbank namens archiv.mdb erstellt. nun wollte ich mit folgenden Klassen keine Datenbankverbindung erstellen um dann auch später abfragen zu können.


```
class Archiv
{
  private String query;
  private String verbindung;
  private String sqlSchnittstelle;

  public Archiv()
  {
    query = "";
    verbindung = "";
    sqlSchnittstelle = "";
  }
  
  public String getQuery()
  {
    return query;
  }
  
  public void setQuery(String localQuery)
  {
    query = localQuery;
  }
  
  public void createMyConnection(String connString)
  {
    try
    {
      verbindung = DriverManager.getConnection(connString);
      sqlSchnittstelle = verbindung.createStatement();
    }
    catch (SQLException e)
    {
      System.out.println("Verbindungsfehler zur Datenbank: " + e.getMessage());
    }
  }
}
```

und 


```
class execDatabase
{
  public static void main(String[] args)
  {
    Archiv myConn = new Archiv();
    myConn.setQuery("SELECT * FROM tabname");
    System.out.println(myConn.getQuery());

    myConn.createMyConnection("jdbc:odbc:archiv");

  }
}
```

Ich hoffe ihr könnt mir helfen und zeigen wie man das programmiert. Bin echt am verzweifeln.


----------



## Thomas Darimont (8. Oktober 2005)

Hallo!


```
/**
   * 
   */
  package de.tutorials;
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  /**
   * @author Tom
   * 
   */
  public class MSAccessExample {
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  
  		Connection con = DriverManager
 		 	.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:/Programme/Microsoft Office/Office/Samples/Nordwind.mdb");
  
  		Statement stmt = con.createStatement();
  
  		ResultSet rs = stmt.executeQuery("SELECT * FROM kunden");
  		ResultSetMetaData rsmd = rs.getMetaData();
  		int clmCnt = rsmd.getColumnCount();
  
  		while (rs.next()) {
  			for (int i = 1; i <= clmCnt; i++) {
 				System.out.print(rs.getString(i));
  				System.out.print(" ");
  			}
  			System.out.println();
  		}
  		rs.close();
  		stmt.close();
  		con.close();
  	}
  }
```
 
  Gruß Tom


----------



## Marshallbbw (8. Oktober 2005)

Hallo Tom,
vielen Dank für dein Beispiel. Mir ist jetzt einiges klar geworden. Ich hab da aber noch ne Frage. Ich wollte das dann mal testen, hab den Tabellennamen geändert und meinen Pfad eingeben. Beim ausführen gabs dann aber folgende Meldung:

"Exception in thread "main" java.lang.NoClassDefFoundError: de/tutorials/MSAccess
Example"

und was bedeutet package de.tutorials; - Ich schätze das hängt miteinander zusammen. Ich versteh das nicht. Kannst du mir das erklären.

Danke nochmal.


----------



## seicke (8. Oktober 2005)

Hi!

Lösch einfach die Zeile 
	
	
	



```
package de.tutorials;
```
 und es sollte bei dir laufen.
Falls du was über packages mal nachlesen willst, schau mal hier  vorbei.

MfG
Sebastian


----------



## Marshallbbw (9. Oktober 2005)

Hallo,

nee leider funktioniert das auch nicht. Ich bekomme dann eine viel umfangreichere Meldung. Zwar immer noch Exception in thread ... aber er listet ne Menge java.* auf. MMMhhh was kann ich da machen?


----------



## Marshallbbw (9. Oktober 2005)

Hab jetzt noch ein bisschen rum getüffelt, es aber noch nicht geschafft - bekomme jetzt eine andere meldung. 

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


mein Quelltext sieht folgendermaßen aus:


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

 public class MSAccessExample
 {
   public static void main(String[] args) throws Exception
   {
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

     Connection con = DriverManager.getConnection("jdbc:odbc:-)RIVER={Microsoft Access Driver (*.mdb)};DBQ=D:/Dokumente und Einstellungen/USER/Desktop/java/recherche/db/archiv.mdb");

     Statement stmt = con.createStatement();

     ResultSet rs = stmt.executeQuery("SELECT * FROM tabname");
     ResultSetMetaData rsmd = rs.getMetaData();
     int clmCnt = rsmd.getColumnCount();

     while (rs.next())
     {
       for (int i = 1; i <= clmCnt; i++)
       {
         System.out.print(rs.getString(i));
         System.out.print(" ");
       }
       System.out.println();
     }
     rs.close();
     stmt.close();
     con.close();
   }
 }
```


----------



## qde (26. Mai 2006)

Hallo,
ohne deinen Quelltext komplett zu lesen, ist mir etwas ins auge gefallen:

Connection con = DriverManager.getConnection("jdbcdbc*RIVER*={Microsoft Access Driver (*.mdb)};DBQ=D:/Dokumente und Einstellungen/USER/Desktop/java/recherche/db/archiv.mdb");

Es geht um einen Treiber und nicht um einen Fluss. 
Also mach mal ein D davor und versuchse es erneut. 

Ansonsten könnte ich mir noch vorstellen, dass Verzeichnisse mit Leerzeichen noch eine Fehlermeldung hervorrufen könnten. Ich hatte in einem anderen Zusammenhang jedenfalls diesbezüglich in Java schonmal Probleme.


----------



## Thomas Darimont (27. Mai 2006)

Hallo!

Ich denke schon, das er es so hat... die Forumsoftware ist an der Bildung des Smilies schuld...

Gruß Tom


----------



## linuxmensch (19. Mai 2007)

Thomas Darimont hat gesagt.:


> Hallo!
> 
> 
> ```
> ...



Vielen Dank für das Bsp hat mir viel Arbeit erspart, war schon langsam am verzweifeln *g*


----------



## jorgeHX (8. Juli 2007)

Hallo,
ich bin letzte Woche auf Windows Vista umgestiegen und auf einmal bekomme ich folgende Fehlermeldung bei meiner Datenbank-Connection:


```
public void open() throws SQLException{
  try{
      // Treiber laden und Connection erzeugen

      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=Datenbank.mdb","Admin","test");

      //System.out.println("nach Treiber laden");
  } catch(ClassNotFoundException cnfe){

    throw new SQLException("Can't find class for driver: ");
  }catch(Exception e){
    e.printStackTrace();
  }


  }
```

Wie kann ich das ändern?  Ich habe es auch schon mit direktem Pfad versucht.
Vielleicht weiß ja jemand Rat hier.
Danke schön.
JP


----------

