0

我是使用 Java 和 MS Access 的初学者。

基本上,我需要传递用户名和密码(使用 MD5 加密)并将其与我的数据库表中的数据进行比较。如果找到,它应该返回一个布尔值 true。

我收到以下错误消息:

错误:java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver]一般错误无法打开注册表项临时(易失性)进程 0x3b0 线程 0xfd4 DBC 0x5a91fcc 的 Ace DSN

这是我检查密码的功能:

private boolean logChck(String username, String password)
     {
      String query;
      boolean login = false;

        try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String filename = "D:/Sand/program/JavaNetbeans/AllCodesHere/TestingCode/src/TestingCode/HotMan2.accdb";
        String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=";
        database+= filename.trim() + ";DriverID=22;READONLY=true}"; 

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

        query = "SELECT (StfFirName, StfPassword) FROM Staff WHERE (StfFirName = ? AND StfPassword = ?)";
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setString(1, username);
        ps.setString(2, password);
        ps.executeQuery();
        ResultSet rs = ps.executeQuery();

        String checkUser = rs.getString(1);
        String checkPass = rs.getString(2);

        if((checkUser.equals(username)) && (checkPass.equals(password)))
        {
            login = true;
        }
        else
        {
            login = false;
        }

        connection.close();  
      } 

       catch (Exception err) {
       System.out.println("ERROR: " + err);
       }                                                                      

    return login;
}
4

2 回答 2

2

似乎是权限问题 - 查看 MS 支持的建议:http: //support.microsoft.com/kb/295297

正如@minitech 的评论中所建议的那样,从那里粘贴相关部分:

原因:

用于访问页面的帐户无权访问 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC 注册表项。

解析度:

  1. 启动注册表编辑器 (Regedt32.exe)。
  2. 在注册表中选择以下项:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
  3. 在“安全”菜单上,单击“权限”。
  4. 键入访问网页的帐户所需的权限。
  5. 退出注册表编辑器。
于 2013-09-29T14:04:35.533 回答
0

这里有很多东西。

这不是密码问题;这是一般的连接问题。文件名和数据库名称字符串处理看起来不正确。斜线的方向是否正确?只使用连接字符串创建一个 helloWorld 程序并首先运行它。

您不需要调用 executeQuery() 两次:

ps.executeQuery();   // get rid of this one
ResultSet rs = ps.executeQuery(); // leave this one.
于 2013-09-29T14:31:12.553 回答