Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassNotFoundException:发生sun.jdbc.odbc.JdbcOdbcDriver异常。为什么?_Java_Ms Access_Jdbc_Jdbc Odbc - Fatal编程技术网

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

java.lang.ClassNotFoundException:发生sun.jdbc.odbc.JdbcOdbcDriver异常。为什么?,java,ms-access,jdbc,jdbc-odbc,Java,Ms Access,Jdbc,Jdbc Odbc,我已经创建了一个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.Jd

我已经创建了一个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块的第一行得到异常。那就是
class.forname(“…”)。为什么会出现这种异常?

对于Java 7,您可以省略
Class.forName()
语句,因为它实际上不是必需的

对于Java 8,您不能使用JDBC-ODBC桥,因为它已被删除。您将需要使用类似的内容。有关详细信息,请参阅


在JDK 8中,不再使用jdbc odbc桥,因此从JDK中删除。要在JAVA中使用MicrosoftAccess数据库,您需要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 i.e. MS Access DB>");
Statement s = conn.createStatement();
要使用的某些进口产品。必须使用try-catch-block,并且不可忘记一些必要的事情

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

设置:

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”)
也不起作用。 然后我登录到这个网站,下载UCanAccess 2.0.8zip(正如Gord Thompson先生所说)文件并解压缩

然后,您还可以在解压文件夹中找到这些*.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个文件,并将它们粘贴到这2个位置:

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

}

将这些依赖项添加到.pom文件:

<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId>
  <version>2.5.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>com.healthmarketscience.jackcess</groupId>
  <artifactId>jackcess-encrypt</artifactId>
  <version>3.0.0</version>
</dependency>

<dependency>
  <groupId>net.sf.ucanaccess</groupId>
  <artifactId>ucanaccess</artifactId>
  <version>5.0.0</version>
</dependency>

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>

在运行java程序之前,请确保已关闭MSAccess文件。

Hina,我不确定这是否是的副本,但您一定值得看看这个问题。对于@OlegEstekhin的列表,还有一个副本,是的,但是JDBC ODBC桥接器是一种特殊情况。您使用的是哪种Java版本?@markrottveel亲爱的它的java8,jdk 8,但我也尝试了jdk 7。这就是jackcess。。但是jackcess也没有帮我。再次出现了一些例外情况。我使用的是Database db=DatabaseBuilder.open(新文件(“db.mdb”);数据库数据库;db=DatabaseBuilder.open(新文件(“E://persondb/personsinfo.mdb”)@hinaabbasi如果您对使用UCanAccess或Jackcess有疑问,请提供相关代码和您收到的实际错误消息。它是否适用于Visual FoxPro数据库?我只是试了一下,但没有成功。因为它没有
.accdb
文件扩展名。Thanks@Yubaraj-不,UCanAccess不能与VFP数据库一起工作。因为oracle购买了sun,java中的所有东西都在下降,该死的oracle
<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId>
  <version>2.5.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>com.healthmarketscience.jackcess</groupId>
  <artifactId>jackcess-encrypt</artifactId>
  <version>3.0.0</version>
</dependency>

<dependency>
  <groupId>net.sf.ucanaccess</groupId>
  <artifactId>ucanaccess</artifactId>
  <version>5.0.0</version>
</dependency>

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
Connection conn = DriverManager.getConnection("jdbc:ucanaccess://{file_location}/{accessdb_file_name.mdb};memory=false");