2014-04-10 9 views
26

Utworzono bazę danych MS Access i przypisano do niej numer DSN. Chcę uzyskać do niego dostęp za pośrednictwem mojej aplikacji Java.java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Występuje wyjątek. Czemu?

To co robie:

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); 
     } 
    } 
} 

otrzymuję wyjątek w pierwszym wierszu bloku try. To jest class.forname("..");. Dlaczego mam ten wyjątek?

+1

Hina, nie jestem pewien, czy to jest duplikatem http://stackoverflow.com/questions/19709843/jdbc-odbc-driver-connection ale z pewnością byłoby warto, aby rzucić okiem w tym pytaniu. –

+0

Jeszcze jeden duplikat listy http://stackoverflow.com/search?q=jdbc+ClassNotFoundException –

+0

@OlegEstekhin, cóż, tak, ale most JDBC ODBC to jeden z wyjątkowych przypadków. –

Odpowiedz

27

Dla języka Java 7 można po prostu pominąć instrukcję Class.forName(), ponieważ nie jest to wymagane.

W przypadku języka Java 8 nie można używać mostu JDBC-ODBC, ponieważ został on usunięty. Będziesz musiał zamiast tego użyć czegoś takiego jak UCanAccess. W celu uzyskania dalszych informacji patrz

Manipulating an Access database from Java without ODBC

+1

czyli jackcess .. ale jackcess też mi nie pomaga. znowu występują pewne wyjątki. używam Database db = DatabaseBuilder.open (nowy plik ("db.mdb")); –

+0

Baza danych db; db = DatabaseBuilder.open (nowy plik ("E: //PersonsDB/personsinfo.mdb")); –

+1

@hinaabbasi Jeśli masz pytanie dotyczące używania UCanAccess lub Jackcess, proszę [zadaj nowe pytanie] (http://stackoverflow.com/questions/ask), które zawiera odpowiedni kod i rzeczywiste komunikaty o błędach, które otrzymujesz. –

5

w JDK 8 jdbc odbc mostek nie jest już używany, a w ten sposób usuwa się powrotem JDK. do korzystania z bazy danych Microsoft Access w JAVA, potrzebujesz 5 dodatkowych bibliotek JAR.

1- hsqldb.jar

2- jackcess 2.0.4.jar

3- fotografia-język-2.6.jar

4- Commons zalogowania 1.1.1.jar

5- ucanaccess-2.0.8.jar

dodaj te biblioteki do swojego projektu java i zacznij od następujących linii.

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

ścieżka może być jak E:/Project/JAVA/DBApp

a następnie zapytanie do wykonania. Podobnie jak w przypadku niektórych importów, które należy użyć. spróbuj catch catch block i niektóre niezbędne rzeczy, których nie można zapomnieć.

Pamiętaj, że nie ma potrzeby mostkowania sterowników, takich jak jdbc odbc lub jakiekolwiek inne rzeczy.

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 

ten sposób przezwyciężyć mój błąd.

Na samym początku mój Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") również nie zadziałał. Następnie loguję się do tego website i pobieram plik ZIP UCanAccess 2.0.8 (jak powiedział Mr.Gord Thompson) i rozpakowuję go.

Wtedy będziesz mógł również znaleźć te *.pliki jar w tym folderze unzip:

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

To co zrobiłem było skopiowane wszystkie te 5 plików i wklej je w tych 2 miejscach:

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

(Zrobiłem to najśmieszniejsze becoz byłem w stanie aby zaimportować te biblioteki do mojego projektu)

Następnie ponownie otwieram zaćmienie za pomocą mojego projektu. Następnie widzę wszystkie pliki * .jar w folderze JRE System Library mojego projektu.

Wreszcie mój kod działa.

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

odkąd oracle kupił słońce, java spada, cholera, wyrocznia – Dunken

Powiązane problemy