当前位置: 首页 > 知识库问答 >
问题:

Microsoft Access和Java JDBC-ODBC错误

唐向荣
2023-03-14

但是我可以犯错误,

java.sql.sqlException:[Microsoft][ODBC驱动程序管理器]指定的DSN包含线程“main”java.lang.NullPointerException中驱动程序和应用程序异常之间的体系结构不匹配

使用SysWoW64>odbcad32创建数据源im,并将数据源添加到系统DNS。我这样说,就像我在64位系统中遇到的其他问题一样。然而,它仍然对我不起作用。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class AuctionHouseJDBC {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String theItem = "Car";
        String theClient="Name";
        String theMessage="1001";



Connection conn =null; // Create connection object

        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("Driver Found");
        } catch(Exception e) {
            System.out.println("Driver Not Found");
            System.err.println(e);
        }

        // connecting to database
        try{
            String database ="jdbc:odbc:Driver={Microsoft Access Driver (*.accdb)};DBQ=AuctionHouseDatabase.accdb;";

            conn = DriverManager.getConnection(database,"","");

            System.out.println("Conn Found");
        }
        catch(SQLException se) {
            System.out.println("Conn Not Found");
            System.err.println(se);
        }
        // Create select statement and execute it

        try{        
            /*String insertSQL = "INSERT INTO AuctionHouse VALUES (  "
                    +"'" +theItem+"', "  
                    +"'" +theClient+"', "
                    +"'" +theMessage+"')";  
            */

            Statement stmt = conn.createStatement();
            String insertSQL = "Insert into AuctionHouse VALUES ('Item','Name','Price')";

             stmt.executeUpdate(insertSQL);
            // Retrieve the results

            conn.close();
        } catch(SQLException se) {
            System.out.println("SqlStatment Not Found");
            System.err.println(se);
        }

    }

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

我安装了64位版本,现在我得到一个错误[Microsoft][ODBC驱动程序管理器]不是一个有效的文件名。

共有1个答案

潘哲
2023-03-14

首先,确保您可以通过ODBC访问该数据库。在odbcad32中为64位和32位系统创建DSN。然后作为JDBC连接字符串,使用:JDBC:odbc:[CreatedDSN]。如果您不能以64位版本的odbcad32连接到Access,那么请确保它在32位版本的odbcad32中工作,并确保使用32位版本的Java。

还可以查看对以下问题的其他响应:无法用Windows-64bit连接到MS Access DB

特别有趣的是以下链接:http://www.selikoff.net/2011/07/26/connect-to-ms-access-file-via-jdbc-in-64-bit-java/

 类似资料:
  • 问题内容: 是否有一个名为JDBC中,而不是那些位置参数,比如在下面的查询? 问题答案: JDBC不支持命名参数。除非你必须使用普通的JDBC(这会造成麻烦,让我告诉你),否则我建议使用Springs Excellent JDBCTemplate,它可以在没有整个IoC容器的情况下使用。 NamedParameterJDBCTemplate支持命名参数,你可以像这样使用它们:

  • 问题内容: 我不知道使用一个相对于另一个有什么优点和缺点。这个问题源自我在这里得到的建议:根据记录的实际大小为数据库查询动态分配缓冲区。 我正在寻找重要差异的列表(而不是详尽的列表),这将有助于我做出有根据的决策。我有win32 :: odbc的工作经验,可以对此进行真正的证明。如果有人可以在“书面”详细信息的基础上分享他/她的经验,那将非常有帮助。 附加信息:Win32 :: ODBC的作者在此

  • 我正在使用JavaJDBC将日期写入SQLServer2008,然后将其读回 读回的日期始终比实际写入的日期早两天。 我正在插入包含日期字段的行,其中包含准备好的语句。日期值由以下人员提供: 将日期写入数据库后,如果我运行以下命令,SQL server将显示正确的日期: 如果我通过JDBC运行相同的查询,然后使用以下方法从结果集中检索日期值 插入的行是表中唯一具有非空日期的行,因此这似乎不是读取错

  • 主要内容:创建 ODBC 连接,连接到 ODBC,取回记录,从记录中取回字段,关闭 ODBC 连接,ODBC 实例ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。 创建 ODBC 连接 通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。 这是创建到达 MS Access 数据库的 ODBC 连接的方法: 在控

  • 在Ruby下使用ODBC的扩展类库。

  • DBD-ODBC 为 Perl 的 DBI::DBD 提供了 ODBC 驱动的功能,允许 Perl 程序通过它访问各种 ODBC 数据源。在 Unix 平台上支持 unixODBC 和 iODBC。