2010-04-05 49 views
3

这是当前在非密码保护的MS Access数据库上工作的连接字符串。如何向尝试连接到MS Access数据库的JDBC:ODBC连接字符串添加密码

此代码段是从我们的properity文件:

db.url = jdbc:odbc:Driver\={Microsoft Access Driver (*.mdb)};Dbq\=C:\Inventory.mdb;DriverID\=22;READONLY\=true 

如何通过数据库密码(非ULS)保护的MS Access数据库连接字符串添加密码吗?

谢谢!

+0

它是数据库密码还是Jet用户级安全密码?下面的@ Tommy的答案适用于ULS,但不适用于数据库密码。 – 2010-04-06 00:51:10

+0

这是一个数据库密码。以下解决方案不起作用。 您有解决方案吗? :) – WillPhil 2010-04-06 16:01:13

+0

是否可以创建一个DNS,然后在连接字符串中使用DSN? – Tommy 2010-04-06 17:06:58

回答

3

从这里引用:Java Support

db.url = jdbc:odbc:Driver\={Microsoft Access Driver (*.mdb)}Dbq\=C:\Inventory.mdb;DriverID\=22;READONLY\=true; UID\=me;PWD\=secret 
+1

+1,但yuck,这是一个丑陋的URL ... – skaffman 2010-04-05 15:54:20

+0

这就是当你必须玩access ... :-( – WillPhil 2010-04-06 16:08:02

+0

我编辑我的问题,使其更具体。上述解决方案只适用于ULS密码。想知道在普通数据库密码的情况下做什么?谢谢! – WillPhil 2010-04-06 16:16:14

0

我知道你要问的ODBC,但它不可能使用OLEDB,如the connect string provided on ConnectionStrings.com

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword; 

我不知道Jet ODBC驱动程序提供对数据库密码的任何支持,这些密码在Jet 4之前并未引入(并且在任何版本的Access/Jet/ACE中都完全没有价值)。

1

要在密码保护MS Access数据库2003/2007工作使用下面的代码片段

package jdbcExample; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class JDBCExampleOfMSAccess2007 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Start of Program"); 
     Connection con = null; 
     Statement stmt = null; 
     ResultSet rs = null; 
     String url=null,userID=null,password=null; 
     String dbFileName=null; 
     String sql=null; 

     dbFileName = "C:\\temp\\MYTestDatabase.accdb"; 
     userID = "Admin"; 
     password = "[email protected]"; 
     <b>url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+ 
       "DBQ="+dbFileName+";"+ 
       "Uid="+userID+";"+ 
       "Pwd="+password+";"; </b> 
     sql = "SELECT * FROM tblUserProfile"; 
     System.out.println("url = "+url); 

     try 
     { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      con = DriverManager.getConnection(url,userID,password); 
      stmt = con.createStatement(); 
      rs = stmt.executeQuery(sql); 
      if(rs!=null) 
      { 
       while(rs.next()) 
       { 
        System.out.print("User ID = "+rs.getString("User ID")); 
        System.out.print(" User Name = "+rs.getString("User Name")); 
        System.out.print(" Password = "+rs.getString("Password")); 
        System.out.println(" Access Type = "+rs.getString("Access Type")); 
       } 
       rs.close(); 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
     try { 
       stmt.close(); 
       con.close(); 
      } catch (SQLException e) { 
       //e.printStackTrace(); 
      } 
     } 
     System.out.println("End of Program"); 
    } 
} 

我的连接字符串URL被

url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+ 
      "DBQ="+dbFileName+";"+ 
      "DriverID=22;READONLY=true;"+ 
      "Uid="+userID+";"+ 
      "Pwd="+password+";"; 

和我面临的一个问题,同时连接到MS Access数据库跟踪如下。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x162c Thread 0x1e98 DBC 0x38f5924                Jet'. 
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at jdbc.JDBCForMSAccess2007.main(JDBCExampleOfMSAccess2007 .java:37) 

为了克服这个问题只是我除去“DriverID = 22; READONLY = TRUE;”在URL字符串和问题得到解决:) 我已经在密码保护的MS Access 2003和2007数据库上测试的给定的代码片段,并且工作良好。

希望能对新的实验有所帮助。

+0

Access数据库文件的密码可以有两种类型:每个用户具有Jet用户级安全性的独立密码(仅限MDB格式) ;任何连接到数据库所需的单个数据库密码您的答案与第一种类型的密码有关,但问题与第二种类型有关。 – HansUp 2012-11-05 10:39:52

相关问题