Search code examples
scalajdbcodbcdsnucanaccess

Connect to a System DSN via UCanAccess


I'm currently upgrading a project from Java 7 to Java 8, thus I switched from using the JDBC-ODBC Bridge to using UCanAccess. The database I want to connect to is registered as a system DSN so I connected to it like this:

Database.forURL("jdbc:odbc:MyDB" + ";DB_CLOSE_DELAY=-1;charSet=Cp1250", driver = "sun.jdbc.odbc.JdbcOdbcDriver")

Now I changed that to

Database.forURL("jdbc:ucanaccess:MyDB" + ";DB_CLOSE_DELAY=-1;charSet=Cp1250", driver = "net.ucanaccess.jdbc.UcanaccessDriver")

but that gives me the error:

Driver net.ucanaccess.jdbc.UcanaccessDriver does not know how to handle URL jdbc:ucanaccess:MyDB;DB_CLOSE_DELAY=-1;charSet=Cp1250

Is there a way to access a DSN via UCanAccess?


Solution

  • Is there a way to access a DSN via UCanAccess?

    Not directly. UCanAccess is a JDBC driver that does not use ODBC, so it has no knowledge of ODBC DSNs.

    Your UCanAccess connection string needs to include the path to the Access database file, e.g.,

    jdbc:ucanaccess://C:/path/to/mydata.accdb
    

    If necessary, you could retrieve that file path from the configuration information for an ODBC DSN. On Windows, the information for a System DSN named MyDB would be in the Windows registry under

    HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\MyDb
    

    or perhaps

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\MyDb