Подтвердить что ты не робот

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("..");. Почему у меня это исключение?

4b9b3361

Ответ 1

Для Java 7 вы можете просто опустить оператор Class.forName(), поскольку он не требуется.

Для Java 8 вы не можете использовать мост JDBC-ODBC, потому что он был удален. Вам нужно будет использовать что-то вроде UCanAccess. Для получения дополнительной информации см.

Манипулирование базы данных Access с Java без ODBC

Ответ 2

в JDK 8 мост jdbc odbc больше не используется и, таким образом, удаляется из JDK. для использования базы данных Microsoft Access в JAVA вам понадобятся 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"));

определенный импорт, который будет использоваться. следует использовать блок catch catch и некоторые необходимые вещи, которые нельзя забыть.

Помните, что нет необходимости подключать драйверы, такие как jdbc odbc или любые вещи.

Ответ 3

Настройка:

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.8 zip (как сказал Mr.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

(Я сделал эту забавную вещь becoz, я не смог импортировать эти библиотеки в свой проект)

Затем я снова открываю затмение с моим проектом. Затем я вижу все файлы *.jar в моей папке JRE System Library проекта.

Наконец, мой код работает.

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

}