Вопрос-ответ

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Exception occurring. Why?

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

Переведено автоматически
Ответ 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"));

необходимо использовать определенный импорт. необходимо использовать блок try 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") также не сработало. Затем я захожу на этот веб-сайт и загружаю zip-файл UCanAccess 2.0.8 (как сказал мистер Горд Томпсон) и распаковываю его.

Тогда вы также сможете найти эти файлы * .jar в этой папке unzip:

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 со своим проектом.затем я вижу все эти файлы * .jar в папке системной библиотеки JRE моего проекта.

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

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

}
Ответ 4

добавьте эти зависимости в свой файл .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>

и добавьте в свой код вызов драйвера:

Connection conn = DriverManager.getConnection("jdbc:ucanaccess://{file_location}/{accessdb_file_name.mdb};memory=false");
java jdbc