2013-09-29 54 views
0

我是使用Java和MS Access的初学者。LoginForm:比较数据库中的用户名和密码

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

我收到以下错误信息:

ERROR: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x3b0 Thread 0xfd4 DBC 0x5a91fcc

这是我的检查密码功能:

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; 
} 
+0

的可能重复[“常规错误无法打开注册表项临时(挥发性)......”从访问ODBC(HTTP:/ /stackoverflow.com/questions/26244425/general-error-unable-to-open-registry-key-temporary-volatile-from-access) –

回答

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. 退出注册表编辑器。
+0

谢谢。我尝试过,但同样的错误。 –

0

这里有很多东西。

这不是密码问题;这是一个普遍的连接问题。有一些关于文件名和数据库名称字符串处理看起来不正确。斜杠是否朝着正确的方向发展?用连接字符串创建一个helloWorld程序,并首先运行。

你并不需要调用的executeQuery()两次:

ps.executeQuery(); // get rid of this one 
ResultSet rs = ps.executeQuery(); // leave this one. 
+0

仍然无法正常工作。我摆脱了它,也一样。请帮帮我 –

相关问题