-1

1) This UCanAccess sample code works with database A (Access 2000)

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            Connection conn = DriverManager.getConnection(DATABASE_URL);
            System.out.println(conn);

2) The same UCanAccess sample code does not work with database B (Access 2000) and leads to this exception stack trace:

net.ucanaccess.jdbc.UcanaccessSQLException
    at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:247)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:233)
    at XXXXXXXXXX.JdbcAccessConnection.main(JdbcAccessConnection.java:23)
Caused by: java.lang.NullPointerException
    at net.ucanaccess.converters.UcanaccessTable.getIndexes(UcanaccessTable.java:74)
    at net.ucanaccess.converters.LoadJet$TablesLoader.loadTableIndexesUK(LoadJet.java:794)
    at net.ucanaccess.converters.LoadJet$TablesLoader.createIndexesUK(LoadJet.java:835)
    at net.ucanaccess.converters.LoadJet$TablesLoader.loadTables(LoadJet.java:921)
    at net.ucanaccess.converters.LoadJet$TablesLoader.access$3(LoadJet.java:919)
    at net.ucanaccess.converters.LoadJet.loadDB(LoadJet.java:1311)
    at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:236)
    ... 3 more

3) The following Jackcess sample code works with database B (with which UCanAccess does not work) and leads to the following output

        Table table = DatabaseBuilder.open(new File(DATABASE_FILE_PATH)).getTable(tableName);
        for (Column column : table.getColumns())
        {
            System.out.println("Column " + column);
        }

output:

Column TextColumn@9234336[
  name: (XXXXXXXXXXXXX) Table
  type: 0xa (TEXT)
  number: 0
  length: 100
  variableLength: true
  compressedUnicode: true
  textSortOrder: SortOrder[1033(0)]
]
Column Column@dc8092a[
  name: (XXXXXXXXXXXXX) Attached
  type: 0x1 (BOOLEAN)
  number: 1
  length: 1
  variableLength: false
]
Column TextColumn@47d1ab77[
  name: (XXXXXXXXXXXXX) Database
  type: 0xa (TEXT)
  number: 2
  length: 100
  variableLength: true
  compressedUnicode: true
  textSortOrder: SortOrder[1033(0)]
]
Column TextColumn@16503677[
  name: (XXXXXXXXXXXXX) Path
  type: 0xa (TEXT)
  number: 3
  length: 100
  variableLength: true
  compressedUnicode: true
  textSortOrder: SortOrder[1033(0)]
]

Has anyone an idea how to get the UCanAccess work right ? In database B there are a lot of links to other .mdb files

4) The UCanAccess error consol shows this:

    Please, enter the full path to the access file (.mdb or accdb): C:\Users\xxx
\Desktop\xxx.mdb
Loaded Tables:

Loaded Queries:

Loaded Indexes:
Primary Key  on BERECHTIGUNGEN Columns: (INDEX,USERID)
, Primary Key  on DG_FEHLER Columns: (ZAEHLER)
, Primary Key  on FEHLERTABELLE_SICH Columns: (FC,BC,SFBEREICH)
, Primary Key  on FGJG1_FEHLER Columns: (ZAEHLER)
, Primary Key  on GRUNDSCHULEN_LOKAL Columns: (SNR)
, Index Unique  on NRW_STRASSEN Columns: (ID)
, Primary Key  on PWRD Columns: (USERID)
, Primary Key  on SCHULTR─GERART Columns: (SCHULTR─GERART)
, Primary Key  on TABELLENZUMHOST Columns: (TABELLE)
, Primary Key  on TABELLENZUMHOST_BK Columns: (TABELLE)
, Primary Key  on TABELLENZUMHOST_WEITERETABS Columns: (TABELLE,WEITERETABELLE)

, Primary Key  on USERID Columns: (USERID)
, Primary Key  on USERKONV Columns: (USERID)
, Primary Key  on ZFEHLERTABELLE Columns: (FC,BC,SFBEREICH)

net.ucanaccess.jdbc.UcanaccessSQLException
        at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:24
7)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at net.ucanaccess.console.Main.main(Main.java:151)
Caused by: java.lang.NullPointerException
        at net.ucanaccess.converters.UcanaccessTable.getIndexes(UcanaccessTable.
java:74)
        at net.ucanaccess.converters.LoadJet$TablesLoader.loadTableIndexesUK(Loa
dJet.java:794)
        at net.ucanaccess.converters.LoadJet$TablesLoader.createIndexesUK(LoadJe
t.java:835)
        at net.ucanaccess.converters.LoadJet$TablesLoader.loadTables(LoadJet.jav
a:921)
        at net.ucanaccess.converters.LoadJet$TablesLoader.access$3(LoadJet.java:
919)
        at net.ucanaccess.converters.LoadJet.loadDB(LoadJet.java:1311)
        at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:23
6)
        ... 3 more
null
Drücken Sie eine beliebige Taste . . . (en: Press any button to continue . . . )
  • 1
    Try using `console.bat` or `console.sh` (included in the root folder of the UCanAccess distribution) to open the troublesome database and see if it gives more details on what is going wrong. – Gord Thompson Apr 01 '15 at 17:58
  • I added the `console.bat` output to my question, but it isn't really more detailed than the java exception stack trace :-( – Andreas M. Oberheim Apr 02 '15 at 10:24

1 Answers1

0

Please execute this using jackcess:

for (String tn : database.getTableNames()) {
       System.out.println(tn);  
        System.out.println(database.getTable(tn));      
}

This may help to understand and solve. Please, give me a feedback.

jamadei
  • 1,680
  • 8
  • 8