2014-04-10 3 views
26

Ich habe eine MS Access-Datenbank erstellt und ihm einen DSN zugewiesen. Ich möchte über meine Java-Anwendung darauf zugreifen. Diesejava.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Ausnahme tritt auf. Warum?

ist, was ich tue:

public class AccessDbConnection { 

    public static void main(String[] args) { 
     System.out.println("**ACCESS DB CONNECTION**"); 

     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // for MS Access ... MS access driver loading 

      String  conURL = "jdbc:odbc:sampleDNS"; 
      Connection con  = DriverManager.getConnection(conURL); 
      Statement statement = con.createStatement(); 
      String  qry  = "SELECT * FROM Table1"; 
      ResultSet rs  = statement.executeQuery(qry); 

      while(rs.next()) { 
       String id = rs.getString("ID") ; 
       String fname = rs.getString("First_Name"); 
       String lname = rs.getString("Last_Name"); 
       System.out.println(id + fname + lname); 
      } 
     } catch (ClassNotFoundException ex) { 
      System.out.println("Classforname Exception!!"); 
      Logger.getLogger(AccessDbConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (SQLException ex) { 
      System.out.println("DriverManager Exception!!"); 
      Logger.getLogger(AccessDbConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

ich die Ausnahme in der ersten Zeile des try-Block immer bin. Das ist class.forname("..");. Warum habe ich diese Ausnahme?

+1

Hina, ich bin nicht sicher, ob dies ein Duplikat http://stackoverflow.com/questions/19709843/jdbc-odbc-driver-connection ist, aber es wäre sicherlich sinnvoll sein, für Sie einen Blick haben bei dieser Frage. –

+0

Noch ein Duplikat für die Liste von http://StackOverflow.com/search?q=jdbc+ClassNotFoundException –

+0

@OlegEstekhin, nun ja, aber die JDBC ODBC-Brücke ist eine Art Sonderfall. –

Antwort

27

Für Java 7 können Sie einfach die Class.forName() Anweisung weglassen, da sie nicht wirklich benötigt wird.

Für Java 8 können Sie die JDBC-ODBC Bridge nicht verwenden, da sie entfernt wurde. Sie müssen stattdessen etwas wie UCanAccess verwenden. Weitere Informationen,

Manipulating an Access database from Java without ODBC

+1

das ist jackcess .. aber jackcess hilft mir auch nicht. wieder treten einige Ausnahmen auf. Ich verwende Datenbank db = DatabaseBuilder.open (neue Datei ("db.mdb")); –

+0

Datenbank db; db = DatabaseBuilder.open (neue Datei ("E: //PersonsDB/personsinfo.mdb")); –

+1

@hinaabbasi Wenn Sie eine Frage zur Verwendung von UCanAccess oder Jackcess haben, [bitte eine neue Frage stellen] (http://stackoverflow.com/questions/ask), die den relevanten Code und die tatsächliche (n) Fehlermeldung (en) enthält, die Sie erhalten. –

5

in JDK 8, JDBC ODBC Brücke nicht mehr verwendet wird und somit der fro JDK entfernt. Um Microsoft Access-Datenbank in JAVA zu verwenden, benötigen Sie 5 zusätzliche JAR-Bibliotheken.

1- hsqldb.jar

2- jackcess 2.0.4.jar

3- Gemeinen-lang-2.6.jar

4- Gemeinen-logging-1.1.1.jar

5- ucanaccess-2.0.8.jar

fügen Sie diese Bibliotheken zu Ihrem Java-Projekt hinzu und beginnen Sie mit den folgenden Zeilen.

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<Path to your database i.e. MS Access DB>"); 
Statement s = conn.createStatement(); 

Weg könnte wie E sein:/Projekt/JAVA/DBApp

und dann Abfrage ausgeführt werden. Wie

ResultSet rs = s.executeQuery("SELECT * FROM Course"); 
while(rs.next()) 
    System.out.println(rs.getString("Title") + " " + rs.getString("Code") + " " + rs.getString("Credits")); 

bestimmte Importe verwendet werden. Versuch Catch Block muss verwendet werden und einige notwendige Dinge nicht zu vergessen.

Denken Sie daran, keine Notwendigkeit, Treiber wie JDBC ODBC oder irgendwelche Sachen zu überbrücken.

3

Setup:

My OS windows 8 64bit 
Eclipse version Standard/SDK Kepler Service Release 2 
My JDK is jdk-8u5-windows-i586 
My JRE is jre-8u5-windows-i586 

Diese, wie ich meine Fehler zu überwinden.

Zum allerersten hat meine Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") auch nicht funktioniert. Dann logge ich mich in diese website und heruntergeladen Sie die UCanAccess 2.0.8 zip (wie Mr.Gord Thompson sagte) Datei und entpacken Sie es.

Dann werden Sie auch diese finden *.JAR-Dateien in diesem unzip Ordner:

ucanaccess-2.0.8.jar 
commons-lang-2.6.jar 
commons-logging-1.1.1.jar 
hsqldb.jar 
jackcess-2.0.4.jar 

Dann, was ich tat, war ich alle diese 5 Dateien kopiert und sie in diesen zwei Stellen einfügen:

C:\Program Files (x86)\eclipse\lib 
C:\Program Files (x86)\eclipse\lib\ext 

(Ich habe das Komische becoz Ich war nicht in der Lage um diese Bibliotheken in mein Projekt zu importieren)

Dann öffne ich die Eclipse mit meinem Projekt. Dann sehe ich all diese * .jar Dateien im JRE System Library Ordner meines Projekts.

Endlich funktioniert mein Code.

public static void main(String[] args) 
{ 

    try 
    { 

     Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\Hasith\\Documents\\JavaDatabase1.mdb"); 
     Statement stment = conn.createStatement(); 
     String qry = "SELECT * FROM Table1"; 

     ResultSet rs = stment.executeQuery(qry); 
     while(rs.next()) 
     { 
      String id = rs.getString("ID") ; 
      String fname = rs.getString("Nama"); 

      System.out.println(id + fname); 
     } 
    } 
    catch(Exception err) 
    { 
     System.out.println(err); 
    } 


    //System.out.println("Hasith Sithila"); 

} 
+0

seit Oracle kaufte Sonne alles in Java geht runter, verdammt du Orakel – Dunken