我尝试了以下方法:
private String password = "";
private String dbName = "dataHC.accdb";
private String bd = dbName + ";PWD=" + password;
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+bd+";";
private Connection conn = null;
//Connect
public void connect() {
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection(url);
if (conn != null)
System.out.println("Conexión a base de datos "+dbName+". listo");
}catch(SQLException e){
System.out.println(e);
}catch(ClassNotFoundException e){
System.out.println(e);
}
}
字体:http://www.jc-mouse.net/base-de-datos/consultas-con-parametros-en-access-y-java
我得到这个错误:
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x7f8 Thread 0x1174 DBC
特别是
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x7f8 Thread 0x1174 DBC 0x8dc8d78 Jet'.
Exception in thread "main" java.lang.NullPointerException
at depuracionDB.consultap(depuracionDB.java:67)
at depuracionDB.main(depuracionDB.java:103)
我使用的是 eclipse IDE Luna 和 Java 版本“1.7.0_45”(64 位)
最佳答案
原因
General error Unable to open registry key Temporary (volatile) Ace DSN for process ...
当当前进程由于以下原因之一无法打开 Access 数据库文件时,这是 Access 数据库引擎(又名“ACE”)ODBC 驱动程序生成的顶级错误消息:
一些其他进程“独占”地打开了数据库。
一些其他进程最初在 Access 中将数据库文件打开为“共享”并且 有一些悬而未决的结构修改,需要对文件进行“独占” Access 。此类待定修改的示例是对尚未保存的模块代码的编辑,或者在设计 View 中打开表单或报表。
运行当前进程的帐户没有足够的文件系统权限来打开数据库文件或其所在的文件夹。
运行当前进程的帐户没有足够的注册表权限来 Access
HKLM\SOFTWARE\ODBC
项下的值。数据库文件根本不存在。
您尝试打开的数据库需要较新版本的 Microsoft Access。
当仅报告顶级错误消息时,较早的“Jet”ODBC 驱动程序会产生更直观的错误消息。当其他进程对文件执行“独占打开”时,错误消息是
Could not use '(unknown)'; file already in use.
当文件有未决的设计更改时,错误消息说
The database has been placed in a state by an unknown user that prevents it from being opened or locked.
但是,当我们只看到 ACE ODBC 驱动程序生成的顶级消息时,我们所看到的只是
General error Unable to open registry key Temporary (volatile) Ace DSN for process ...
那是因为两个驱动程序都返回了多个错误消息,但是它们以不同的顺序返回。 Jet 消息是...
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.
ERROR [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xed4 Thread 0x1204 DBC 0xab004 Jet'.
ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed
ERROR [01000] [Microsoft][ODBC Microsoft Access Driver]General Warning Unable to open registry key 'Temporary (volatile) Jet DSN for process 0xed4 Thread 0x1204 DBC 0xab004 Jet'.
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.
...而 ACE 消息是:
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.
ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xf6c Thread 0x1568 DBC 0x6347fec Jet'.
ERROR [HY000] [Microsoft][ODBC Microsoft Access Driver] The database has been placed in a state by an unknown user that prevents it from being opened or locked.
解决方案
场景 1 和 2(另一个进程对该文件具有“独占”锁):
确保数据库文件未被任何其他进程打开——通常这意味着仅关闭 Access 应用程序本身——然后从外部应用程序重试 ODBC 操作。重新启动计算机是确保任何其他此类进程已终止并放弃对数据库文件的声明的一种方法。
场景三(文件/文件夹权限不足):
调整权限或将文件移动到用户可以打开文件的位置。将数据库文件放在驱动器的根文件夹中是此类问题的常见原因。
场景四(注册表权限不足):
调整注册表权限以允许帐户 Access HKLM\SOFTWARE\ODBC
键。在这种情况下,最常见的原因是 IIS 进程在没有正常“用户”权限的帐户下运行。在那种情况下请记住,您无论如何都不应该将 Access 数据库与 IIS 一起使用。
场景5(数据库文件不存在):
修复连接字符串,使其包含现有文件的有效路径。
场景 6(数据库文件需要较新版本的 Access):
升级 Microsoft Access 或 Access Database Engine Redistributable(如果可用)。
关于ms-access - "General error Unable to open registry key Temporary (volatile) ..."来自 Access ODBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244425/