java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver Excepción producida. ¿Por qué?

Creé una base de datos de MS Access y le asigné un DSN. Quiero acceder a él a través de mi aplicación Java.

Esto es lo que estoy haciendo:

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

Obtengo la excepción en la primera línea del bloque try. Eso es class.forname(".."); . ¿Por qué estoy teniendo esta excepción?

Para Java 7 simplemente puede omitir la statement Class.forName() ya que realmente no es necesaria.

Para Java 8 no puede usar el puente JDBC-ODBC porque se ha eliminado. Deberás usar algo como UCanAccess en su lugar. Para más información, ver

Manipular una base de datos de Access desde Java sin ODBC

en JDK 8, jdbc odbc bridge ya no se usa y se elimina del JDK. para utilizar la base de datos de Microsoft Access en JAVA, necesita 5 bibliotecas JAR adicionales.

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

agregue estas bibliotecas a su proyecto de Java y comience con las siguientes líneas.

 Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"); Statement s = conn.createStatement(); 

ruta podría ser como E: / Proyecto / JAVA / DBApp

y luego tu consulta será ejecutada. Me gusta

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

ciertas importaciones que se utilizarán. prueba de capturar el bloque debe ser usado y algunas cosas necesarias no deben olvidarse.

Recuerde, no hay necesidad de conectar controladores como jdbc odbc o cualquier otra cosa.

Preparar:

 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 

Esta es la forma en que supero mi error.

Al principio, mi Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") tampoco funcionaba. Luego, inicio sesión en este sitio web y descargué el archivo ZIP de UCanAccess 2.0.8 (como dijo el Sr. Gordon Thompson) y lo descomprimí.

Luego también podrá encontrar estos archivos * .jar en esa carpeta descomprimida:

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

Entonces, lo que hice fue copiar todos estos 5 archivos y pegarlos en estas 2 ubicaciones:

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

(Hice esa cosa graciosa porque no pude importar estas bibliotecas a mi proyecto)

Luego vuelvo a abrir el eclipse con mi proyecto. Luego veo todos los archivos * .jar en la carpeta de la biblioteca del sistema JRE de mi proyecto.

Finalmente mi código funciona.

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