web-dev-qa-db-fra.com

java.lang.ClassNotFoundException: Sun.jdbc.odbc.JdbcOdbcDriver Une exception s'est produite. Pourquoi?

J'ai créé une base de données MS Access et lui ai attribué un DSN. Je souhaite y accéder via mon application Java.

Voici ce que je fais:

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

Je reçois l'exception à la première ligne du bloc try. C'est class.forname("..");. Pourquoi ai-je cette exception?

31
hina abbasi

Pour Java 7, vous pouvez simplement omettre l’instruction Class.forName()] car elle n’est pas vraiment requise.

Pour Java 8, vous ne pouvez pas utiliser le pont JDBC-ODBC, car celui-ci a été supprimé. Vous devrez utiliser à la place CanAccess . Pour plus d'informations, voir

Manipulation d'une base de données Access à partir de Java sans ODBC

29
Gord Thompson

dans JDK 8, le pont jdbc odbc n’est plus utilisé et a donc été supprimé du JDK. Pour utiliser la base de données Microsoft Access en Java, vous avez besoin de 5 bibliothèques JAR supplémentaires.

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

ajoutez ces bibliothèques à votre projet Java et commencez par les lignes suivantes.

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

le chemin peut ressembler à E:/Project/Java/DBApp

et ensuite votre requête à exécuter. Comme

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

certaines importations à utiliser. try catch block doit être utilisé et certaines choses nécessaires ne doivent pas être oubliées.

Rappelez-vous qu’il n’ya pas besoin de passerelles comme jdbc odbc ou autre.

5
Umair Bhatti

Installer:

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

C'est comme ça que j'ai surmonté mon erreur.

Au tout début, ma Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver") ne fonctionnait pas non plus. Ensuite, je me connecte à ce site web et télécharge le fichier UCanAccess 2.0.8 Zip (comme l’a dit M. Gord Thompson) et le décompresse.

Ensuite, vous pourrez également trouver ces fichiers * .jar dans ce dossier décompressé:

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

Ensuite, j'ai copié tous ces 5 fichiers et les ai collés à ces 2 emplacements:

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

(J'ai fait ce truc marrant parce que j'ai été incapable d'importer ces bibliothèques dans mon projet)

Ensuite, je rouvre Eclipse avec mon projet. Je vois ensuite tous ces fichiers * .jar dans le dossier JRE System Library de mon projet.

Enfin, mon code fonctionne.

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