Для работы с защищенной паролем базой данных 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 = "Ganesh@123";
<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, хорошо работает.
Надеюсь, что будет полезно провести новый эксперимент.