Java MSAccess无DSN

Java MSAccess无DSN,java,ms-access,jet,dsn,Java,Ms Access,Jet,Dsn,所以问题是我想连接到一个msaccess数据库,该数据库在每次打开时都有密码 如果我直接打开access文件,则密码有效 如果我删除了密码,我可以建立连接,这意味着如果没有密码,我的代码就可以工作 密码是使用数据库工具中的“设置数据库密码”设置的 MS Access 2007(但我使用了.mdb) 这是密码 String dbFile = "db.mdb"; String connectionString = "jdbc:odbc:Driver={Microsoft Access Drive

所以问题是我想连接到一个msaccess数据库,该数据库在每次打开时都有密码

  • 如果我直接打开access文件,则密码有效
  • 如果我删除了密码,我可以建立连接,这意味着如果没有密码,我的代码就可以工作
  • 密码是使用数据库工具中的“设置数据库密码”设置的
  • MS Access 2007(但我使用了.mdb)
这是密码

String dbFile = "db.mdb";
String connectionString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
String driverID = ";DriverID=22;READONLY=true;pwd=qwer}";
if (CONNECTION == null || CONNECTION.isClosed()) {
   dbURL = connectionString + dbFile.trim() + driverID;
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   CONNECTION = DriverManager.getConnection(dbURL);
}

----------------------------------------------
Error Code : java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Not a valid password.
----------------------------------------------
我已经尝试向get连接添加参数,但没有成功。
请提供帮助:)

MS Access数据库文件有两种类型的密码:

  • 用户密码
  • 数据库密码
  • 使用用户密码,可以在连接字符串中提供用户名和密码

    ;User Id=admin;Password=;
    
    对于数据库密码,您需要在连接字符串中使用不同的标识符来区分作为数据库密码而不是用户密码的密码

    ;Database Password=MyDbPassword;
    
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\mydb.mdb;" & _
                     "Jet OLEDB:Database Password=MyDbPassword;", "admin", ""
    
    就我个人而言,我不使用数据库密码。该功能在安全性方面没有提供太多的功能,因此它似乎比它的价值更麻烦

    编辑:我不知道是否可以通过ODBC连接提供数据库密码。我发现的所有连接示例在包含数据库密码时都使用OLEDB

    ;Database Password=MyDbPassword;
    
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\\somepath\\mydb.mdb;" & _
                     "Jet OLEDB:Database Password=MyDbPassword;", "admin", ""
    
    也许可以从当前的Access ODBC驱动程序切换到用于ODBC的Microsoft OLE DB提供程序。或者,如果您切换,则可能使用当前的ODBC驱动程序

    Database Password=MyDbPassword;
    


    我不知道。但在我看来,数据库密码正在妨碍你。如果从数据库中删除密码,您已经知道可以进行连接

    我同意这一点,但这个“数据库密码=MyDbPassword;”不起作用。嗯,这看起来有点让人困惑,呵呵,但我会从中找出一些东西。我尝试了“Jet-OLEDB:Database-Password=MyDbPassword”;但效果并不理想。数据库连接是我的最低点呵呵谢谢你的快速回复:)最后一个问题。。我将如何保护我的数据库不被刚刚打开并更改内容的人破坏,你能告诉我一本好的读物吗?谢谢,我将研究OLEDB。现在我只知道在那个特定的数据库上设置密码。你的意思是防止他们直接用Access修改MDB吗?如果与Java应用程序兼容,请从存储MDB的文件夹中删除不允许修改数据库的用户的权限。。。Java应用程序必须在拥有文件夹权限的帐户下运行。MDB格式数据库的另一个选项是ULS(Jet用户级安全);您需要管理Access应用程序的用户和组权限。但这一点可以被一个老练而坚定的黑客打败。有了Access,你可以阻止用户做你不想做的事情(让他们觉得很有挑战性),但你无法阻止他们做错误的事情。如果您的安全要求很严格,请将数据存储从Access移动到功能更强大的服务器数据库。@iDevelop关于meta上的标记有一个很长的争论,我认为最终的结论是最好保留ms Access标记以用于ms Access相关的问题,即使jet更好,因为这是未来搜索的人更可能选择的。此外,jet标签惹恼了一些人,与jet/ACE的标签战开始了。这有点乏味:)删除MS-ACCESS是标记故意破坏。恢复