为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.ClassNotFoundException:sun.jdbc.odbc

java.lang.ClassNotFoundException:sun.jdbc.odbc

慕容3067478 2019-07-01 10:39:22
java.lang.ClassNotFoundException:sun.jdbc.odbc我创建了一个MSAccess数据库,并给它分配了一个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块的第一行,我得到了异常。那是class.forname("..");..为什么我有这个例外?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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

对于Java 8,您不能使用JDBC-ODBC桥,因为它已经被删除。您将需要使用类似于UCanAccess相反。有关更多信息,请参见

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


查看完整回答
反对 回复 2019-07-01
?
炎炎设计

TA贡献1808条经验 获得超4个赞

在JDK 8中,JDBCODBC桥不再使用,因此从JDK中删除。要在Java中使用MicrosoftAccess数据库,需要5个额外的JAR库。

1-hsqldb.jar

2-累积2.0.4.jar

3-公-朗-2.6.jar

4-共用-日志-1.1.1.jar

5-ucanaccess-2.0.8.jar

将这些库添加到您的java项目中,并从以下几行开始。

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

路径可以类似于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"));

将使用的某些进口品。尝试捕捉块必须使用和一些必要的东西,不要忘记。

记住,不需要像JDBC、ODBC之类的桥接驱动程序。


查看完整回答
反对 回复 2019-07-01
?
LEATH

TA贡献1936条经验 获得超6个赞

设置:

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

这就是我克服错误的方法。

在第一次我Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")也没用。然后我登录到这个网站并下载了UCanAccess2.0.8zip(正如戈德·汤普森所说)文件,并将其解压缩。

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

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

然后,我复制了所有这5个文件,并将它们粘贴到以下两个位置:

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

(我做了一件有趣的事情,因为我无法将这些库导入到我的项目中)

然后用我的项目重新打开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");}


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 1902 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信