【问题标题】:Nothing happening when reading .accdb database读取 .accdb 数据库时没有任何反应
【发布时间】:2014-05-09 11:03:12
【问题描述】:

我正在尝试创建一个程序来读取数据库并输出它。我已按照http://www.codeproject.com/Articles/35018/Access-MS-Access-Databases-from-Java 的教程进行操作。但是当我运行我的程序时,什么也没有发生。甚至没有错误...

我可能错过了一些东西,但我不知道它会是什么。这是我的代码:

import java.sql.*;

public class ReadDB {

public static void ReadDB() {

    try{
        //Source: http://www.codeproject.com/Articles/35018/Access-MS-Access-Databases-from-Java
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=ratingdb.accdb;";
        Connection conn = DriverManager.getConnection(database, "", "");
        Statement s = conn.createStatement();

        //Read Table
        String selTable = "SELECT * FROM RATINGS";
        s.execute(selTable);
        ResultSet rs = s.getResultSet();
        while((rs!=null) && (rs.next()))
        {
           System.out.println(rs.getString(1) + " : " + rs.getString(2));
        }




        s.close();
        conn.close();

    } catch(Exception e){
        System.out.println ("Unable to connect to the database");
        System.out.println ("Exception: " + e.getMessage());
    }



}

} 在黑豹的评论之后,我得到了这个错误: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x13f4 Thread 0x1204 DBC 0x42170d4

编辑:出现新错误:Exception: [Microsoft][ODBC Microsoft Access Driver] Not a valid file name.这是否意味着我使用的驱动程序不存在?

【问题讨论】:

  • 不要吞下异常,记录它们,打印堆栈跟踪,否则让它知道发生了异常或正确处理异常。不要只是忽略它们!
  • 如果您使用的是 Java 8:Java 8 不再包含 JdbcOdbcDriver
  • 也可能是你的DSN有问题...

标签: java ms-access jdbc odbc jdbc-odbc


【解决方案1】:

即使它抛出异常,您也无法看到它们,因为您以错误的方式处理了错误。您不应该只捕获异常并继续前进。这违背了异常处理的整个概念。

您应该这样做,以便在控制台中打印您的异常。

try {

  //code that throws exceptions

} catch(Exception e) {
  e.printStackTrace(); //prints the error to the console and you missed it
}

编辑: 您似乎遇到了一些权限问题。

摘自网站http://support.sas.com/kb/40/228.html

出现此问题的原因有多种,包括对 ODBC 注册表项没有权限。在这种情况下,请按如下方式更改注册表项的权限:

使用 regedit 命令启动注册表编辑器: 选择开始 ► 运行并输入 regedit。

如果您的 SAS PC 文件服务器位于 64 位计算机上,请展开以下键: HKEY_LOCAL_MACHINE ► 软件 ► WOW6432NODE ► ODBC。

如果您的 SAS PC 文件服务器位于 32 位计算机上,请展开以下键: HKEY_LOCAL_MACHINE ► 软件 ► ODBC。

右键单击 ODBC 文件夹并选择权限。

确保运行 SAS 进程的登录 ID 具有完全控制权。 由于 Microsoft 的旧 ODBC 驱动程序,尤其是 Office 2007 的驱动程序,也可能会出现此问题。 要安装较新的 ODBC 驱动程序,请转到 Microsoft Access Database Engine 2010 Redistributable。

如果您有 32 位 Microsoft Office,请下载 AccessDatabaseEngine.exe 文件。 仅当您拥有 64 位版本的 Microsoft Office 时才下载其他 ODBC 驱动程序。

如果您尝试创建 .mdb 文件并使用它,请执行此操作

File -> Options -> General, and set the Default File Format to Access 2002-2003

并将您的数据库 URL 更改为

"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=ratingdb.mdb;";

使用.mdb 文件。

要使用.accdb 文件,请尝试这样做,

"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=ratingdb.accdb;";

【讨论】:

  • 你是对的。谢谢你的提示!查看我的编辑以了解我得到的错误。
  • @ikhebgeenaccount(顺便说一句:请更改您的用户名),您更有可能需要指定数据库文件的完整路径。
  • @ikhebgeenaccount 将数据库放入 jar 将使其完全无法访问。我的建议是解决问题的起点。例如:如果它使用固定路径,那么您只需(例如)定位数据库文件并在运行时创建连接字符串,或者找出哪个相对路径可以工作。
  • @ikhebgeenaccount 这只是意味着你必须逃避你的反斜杠..即 D:\\Users\\Lars 等等
  • @GordThompson :感谢您指出...我已经更新了我的答案.. :)
猜你喜欢
  • 2019-10-12
  • 1970-01-01
  • 2021-06-22
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2015-01-26
相关资源
最近更新 更多