win7 64位 java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 问题

64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序,也不支持更早的Microsoft Access Driver (*.mdb)方式连接。所以,程序里面的链接字符串不能正常工作。需要修改下IIS的工作环境,改成32位的,在IIS的管理界面中,把应用程序池中的默认应用程序池常规选项中的32位方式启用就可以了。

Win7 下Access的 ODBC连接

直接在

控制面板---管理工具----数据源(ODBC)

打开数据源配置,发现只有SQLServer的驱动,其他的都没有了。

解决方法是:

C:/Windows/SysWOW64

在这个目录下找到:

odbcad32.exe

这个文件,双击打开。

里面有很多可用个数据源驱动,然后就可用添加连接Access的ODBC的数据源了。

  java学到Access数据库那里用ODBC时提示:”java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”,现在终于弄好了,把过程跟大家分享一下。
  Win7 64控制面板里面直接打开ODBC就只有Mysql,添加Access会出错:“[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”,到网上查了一下,直接运行C:/Windows/SysWOW64/odbcad32.exe 就是32位ODBC,这个里面倒是能添加Access数据库了。然后用我的64位Java编译,运行后还是有错:“指定之DNS中的驱动程式和应用程式架构不相符”,终于明白64位Java要对应64位ODBC,于是安装了Microsoft Office 2010 64bit 这回使用控制面板里面的64位ODBC终于能加Access数据库了,Java编译运行也正常了。此时我在使用目录里面的32位ODBC反而不行了(之前的32位Office卸载了)提示:“找不到Microsoft Access Driver (*.mdb,*.accdb)ODBC驱动程序的安装例程,请重新安装驱动程序”。据我分析如果安装32位Java则用系统目录里的32位Odbc也是可以的,所以软件的构架要相对应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要编写Java应用程序连接到Access数据库中的表product,并查询价格大于100元的记录,需要进行以下步骤: 1. 加载JDBC驱动程序,因为Access数据库需要使用ODBC驱动程序,所以我们可以使用ucanaccess jdbc驱动,需要将它的jar包添加到项目中。 2. 建立连接,使用JDBC API建立与Access数据库的连接,需要提供连接字符串和用户名密码等信息。 3. 创建SQL查询语句,这里要查询表product中价格大于100元的记录,可以使用SELECT语句来实现。 4. 执行查询,使用JDBC API的Statement对象的executeQuery方法执行查询语句,将结果保存在ResultSet对象中。 5. 处理结果,从ResultSet中读取查询结果,并输出。 以下是代码示例,实现上述操作: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class AccessDemo { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); // 加载驱动 String dbUrl = "jdbc:ucanaccess://c:/source.mdb;memory=false"; // 连接字符串 conn = DriverManager.getConnection(dbUrl); // 建立连接 stmt = conn.createStatement(); // 创建Statement对象 String sql = "SELECT * FROM product WHERE price > 100"; // 创建查询语句 rs = stmt.executeQuery(sql); // 执行查询 while (rs.next()) { // 处理结果 int pid = rs.getInt("pid"); String pname = rs.getString("pname"); int price = rs.getInt("price"); System.out.println(pid + "\t" + pname + "\t" + price); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭资 try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 以上就是连接Access数据库,查询表product中价格大于100元的记录的java应用程序的实现过程。 ### 回答2: 首先需要在Java应用程序中使用JDBC连接Access数据库c:\source.mdb。需要使用JDBC-ODBC桥连接Access数据库,因此需要首先在Windows中创建数据(DSN)。假设我们已经在Windows中创建了名为“mysource”的DSN,现在就可以在Java程序中使用该数据连接Access数据库了。 以下是与数据库连接并查询的Java代码示例: ``` import java.sql.*; public class AccessDBTest { public static void main(String[] args) { String url = "jdbc:odbc:mysource"; String user = ""; String password = ""; try { Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(); String sql = "SELECT * FROM product WHERE price > 100"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int pid = rs.getInt("pid"); String pname = rs.getString("pname"); int price = rs.getInt("price"); System.out.printf("%d\t%s\t%d\n", pid, pname, price); } rs.close(); stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在以上代码中,首先指定数据库连接的URL、用户名和密码,并使用`DriverManager.getConnection()`方法创建了一个数据库连接。然后使用连接创建了一个`Statement`对象,并使用该对象执行了一条查询语句。查询结果使用`ResultSet`对象返回,我们可以使用其`next()`方法逐行读取查询结果。 对于每一行记录,我们使用`ResultSet`对象的`getInt()`、`getString()`等方法获取相应列的值,并输出到屏幕上。 需要注意的是,在使用JDBC连接Access数据库时需要使用ODBC驱动程序,因此需要在Windows中安装好ODBC驱动程序和Access数据库引擎。 ### 回答3: 要编写Java应用程序连接Access数据库,首先需要下载驱动。在这里,我们选用ucanaccess作为连接Access的驱动。 下载地址:http://ucanaccess.sourceforge.net/site.html 下载完成后,要先将ucanaccess-x.x.x-bin.zip解压缩,在解压缩后的文件夹中找到lib文件夹,将里面的ucanaccess.jar和jackcess-2.1.11.jar加入到项目的classpath中。 在连接数据库之前,需要先将Access文件的路径和数据名字传递给UCanAccess,具体代码如下: ``` String url = "jdbc:ucanaccess://" + "c:/source.mdb" + ";showschema=true"; Connection conn = DriverManager.getConnection(url, "", ""); ``` 接下来,我们编写查询数据库的代码。先编写SQL查询语句: ``` String sql = "SELECT * FROM product WHERE price > 100"; ``` 然后创建Statement对象,执行SQL语句,并输出查询结果: ``` Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int pid = rs.getInt("pid"); String pname = rs.getString("pname"); int price = rs.getInt("price"); System.out.println(pid + "\t" + pname + "\t" + price); } ``` 完整的代码如下: ``` import java.sql.*; public class AccessDemo { public static void main(String[] args) throws Exception { String url = "jdbc:ucanaccess://" + "c:/source.mdb" + ";showschema=true"; Connection conn = DriverManager.getConnection(url, "", ""); String sql = "SELECT * FROM product WHERE price > 100"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { int pid = rs.getInt("pid"); String pname = rs.getString("pname"); int price = rs.getInt("price"); System.out.println(pid + "\t" + pname + "\t" + price); } } } ``` 执行代码后,就可以看到查询结果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值