2017-01-05 94 views
2

我想输入一些数据到微软访问数据库,但我总是得到相同的错误。这里是我的代码:连接到MS访问数据库在java

import java.sql.Connection; 
import java.sql.DriverManager; 

public class testDDB { 

public static void main(String[] args) { 
    try{ 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     String filename = "C:\\test\\Database1.mdb"; 
     String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="; 
     database+= filename.trim() + ";}"; // add on to the end 
     Connection con = DriverManager.getConnection(database ,"",""); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 

我收到以下错误:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source) 
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 

我特地在以前的文章中,我发现类似的问题,但我仍然没有找到解决方案。我的电脑上运行64位,而当我去到C:\ WINDOWS \ Syswow64资料\ obdcad32.exe,我发现enter image description here

如此看来,我有ODBC 64位版本的...

+1

[JDBC驱动程序MS Access连接]的可能重复(http://stackoverflow.com/questions/16626301/jdbc-driver-ms-访问连接) – DimaSan

+0

您是否将访问数据库设置为ODBC数据源? – BretC

+0

这可以帮助你[JDBC ODBC驱动程序](http://stackoverflow.com/questions/17115632/microsoftodbc-driver-manager-data-source-name-not-found-and-no-default-drive) – Kedar1442

回答

1

当我到C:\ Windows \ SysWOW64 \ obdcad32.exe时,发现

| MS Access数据库... Microsoft Access驱动程序(* .MDB,* .ACCDB)

如此看来,我有ODBC

64位版本的文件夹名称 “Syswow64资料” 可能是有点误导。它包含用于32位“WOW”子系统(即“[32位] Windows在Windows [64]”)上的组件。

因此,“SysWOW64 \ obdcad32.exe”实际上是ODBC管理员的32位,实际上您安装的是Access“ACE”ODBC驱动程序的32位版本。因此,您需要在JRE(Java运行时环境)的32位版本下运行您的应用程序才能使用该ODBC驱动程序。

另外,请记住,JDBC-ODBC Bridge已从Java 8中移除,因此您的JRE必须适用于Java 7或更早版本。 (对于Java 8和更高版本,请考虑使用UCanAccess JDBC驱动程序。详细信息here。)