web-dev-qa-db-ja.com

java.lang.ClassNotFoundException:Sun.jdbc.odbc.JdbcOdbcDriver例外が発生しました。どうして?

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("..");です。なぜこの例外が発生するのですか?

31
hina abbasi

Java 7の場合、Class.forName()ステートメントは実際には必要ないため、単に省略できます。

Java 8の場合、JDBC-ODBCブリッジは削除されているため使用できません。代わりに CanAccess のようなものを使用する必要があります。詳細については、

ODBCなしでJavaからAccessデータベースを操作する

29
Gord Thompson

jDK 8では、jdbc odbcブリッジは使用されなくなったため、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 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"));

使用される特定のインポート。 try catchブロックを使用する必要があり、いくつかの必要なことを忘れないでください。

Jdbc odbcなどのブリッジングドライバーは必要ないことを忘れないでください。

5
Umair Bhatti

セットアップ:

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")も機能しませんでした。次に、これにログインします website そしてUCanAccess 2.0.8 Zip(Mr.Gord Thompsonが言ったように)ファイルをダウンロードして解凍します。

次に、そのunzipフォルダーでこれらの* .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");

}
3
Hasith Sithila