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