java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生exception。 为什么?

我创build了一个MS Access数据库并为其分配了一个DSN。 我想通过我的Java应用程序来访问它。

这就是我所做的:

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

我在try块的第一行得到exception。 那是class.forname(".."); 。 为什么我有这个例外?

对于Java 7,您可以简单地省略Class.forName()语句,因为它不是真正需要的。

对于Java 8,您不能使用JDBC-ODBC Bridge,因为它已被删除。 您将需要使用类似UCanAccess的东西。 有关更多信息,请参阅

在没有ODBC的情况下从Java操作Access数据库

在JDK 8中,jdbc odbc bridge不再使用,因此从JDK中删除。 要在JAVA中使用Microsoft Access数据库,您需要5个额外的JAR库。

1- hsqldb.jar

2- jackcess 2.0.4.jar

3- commons-lang-2.6.jar

4- commons-logging-1.1.1.jar

5 ucanaccess-2.0.8.jar

将这些库添加到您的Java项目,并开始以下行。

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

path可能像E:/ Project / JAVA / DBApp

然后你的查询被执行。 喜欢

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

某些import被使用。 必须使用catch catch块,并且不要忘记一些必要的东西。

请记住,不需要像jdbc odbc或任何东西桥接驱动程序。

build立:

 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 

这是我如何克服我的错误。

在第一次我的Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")也没有工作。 然后我login到这个网站 ,下载UCanAccess 2.0.8 zip(正如汤普森先生所说)文件并解压缩。

然后,您还可以在该解压缩文件夹中find这些* .jar文件:

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

然后我所做的就是复制所有这5个文件并将它们粘贴到这两个位置:

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

(我做了这个有趣的事情becoz我无法将这些库导入到我的项目)

然后我重新打开我的项目的eclipse。然后我看到我的项目的JRE系统库文件夹中的所有* .jar文件。

最后我的代码工作。

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