2014-04-29 254 views
0

我需要使用java(javaFX应用程序)连接和访问数据库。当我运行该应用程序时,我在控制器sun.jdbc.odbc.JdbcOdbcDriver中发生错误。我搜查了很多,但我没有找到一个好的解决方案。我使用JDK 1.8和我使用这个类:使用JDBC连接到数据库

public class conexionBD { 

private Connection conexion; 
private Statement sentencia; 

private String controlador; 
private String nombre_bd; 
private String usuarioBD; 
private String passwordBD; 


public conexionBD(){ 
    this.controlador="sun.jdbc.odbc.JdbcOdbcDriver"; 
    this.nombre_bd="C:\\Users\\SANDRA\\Documents\\Access_BD\\Contactos.mdb"; 
    this.usuarioBD=""; 
    this.passwordBD=""; 

} 

public void EstablecerConexion(){ 

    try{ 
     Class.forName (this.controlador); 
    }catch (ClassNotFoundException e){ 
     JOptionPane.showMessageDialog(null, "Error al cambiar el controlador"); 
     e.printStackTrace(); 
    } 

    try{ 
     String DSN="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+this.nombre_bd; 
     conexion=DriverManager.getConnection(DSN,this.usuarioBD,this.passwordBD); 
    }catch (SQLException e){ 
     JOptionPane.showMessageDialog(null,"Error al realizar la conexion "+e); 
    } 

    try { 
     this.sentencia=this.conexion.createStatement( 
     ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_READ_ONLY); 
    } 
    catch (Exception e) { 
     JOptionPane.showMessageDialog(null,"Error al crear el objeto sentencia "+e); 
    } 

} 

} 

唯一的例外是在 的Class.forName(this.controlador);

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:259) 
at net.facturacion.controller.conexionBD.EstablecerConexion(conexionBD.java:41) 
at net.facturacion.view.PantallaPrincipalController.initialize(PantallaPrincipalController.java:34) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3120) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3113) 
at net.facturacion.gestor.principalMain.start(principalMain.java:24) 
at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) 
at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) 
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) 
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) 
at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) 
at java.lang.Thread.run(Thread.java:745) 
+1

Java 8不再提供对ODBC的访问。您需要找到另一个允许访问访问数据库或提供对ODBC的访问的JDBC驱动程序。 –

+1

officiel oracle博客声明:https://blogs.oracle.com/Lance/entry/removal_of_the_jdbc_odbc – user432

+0

谢谢大家! – sandrita

回答