Как я могу добавить пароль к этой строке подключения JDBC: ODBC, которая пытается подключиться к базе данных MS Access - PullRequest
3 голосов
/ 05 апреля 2010

Это строка подключения, которая в настоящее время работает с незащищенной паролем базой данных MS Access.

этот фрагмент кода взят из нашего файла свойств:

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

Как добавить пароль в эту строку подключения для БД MS Access, защищенной паролем базы данных ( Non-ULS )?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 05 апреля 2010

Ссылка отсюда: Поддержка Java

db.url = jdbc:odbc:Driver\={Microsoft Access Driver (*.mdb)}Dbq\=C:\Inventory.mdb;DriverID\=22;READONLY\=true; UID\=me;PWD\=secret
1 голос
/ 05 ноября 2012

Для работы с защищенной паролем базой данных 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, хорошо работает.

Надеюсь, что будет полезно провести новый эксперимент.

0 голосов
/ 08 апреля 2010

Я знаю, что вы запрашиваете ODBC, но невозможно ли использовать OLEDB, как в строке подключения, представленной на 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).

...