указанное сетевое имя больше недоступно при работе с Jackcess

Я пытаюсь написать простую программу Java для извлечения таблиц и столбцов из баз данных Access. Используя кулинарную книгу Jackcess, я получил следующее:

        String sourceDatabase = "C:\\temp\\test1.mdb";
        Database accessDB = DatabaseBuilder.open(new File(sourceDatabase));

        // Loop through the tables
        Set<String> accessTables = accessDB.getTableNames();
        for (String currentTable: accessTables) {
            System.out.println("Reading table " + currentTable + "...");

            Table table = accessDB.getTable(currentTable); // This is line 51 where the stacktrace occurs

            // Loop through columns in current table
            for(Column column : table.getColumns()) {
                String columnName = column.getName();

                Integer colType = column.getSQLType();


                Boolean isAutoNumber = column.isAutoNumber();

                System.out.println("\t" + columnName + " \t" + sqlTypeToText(colType) + "\t" + isAutoNumber);

            }

            System.out.println("");


        }
        accessDB.close();

Однако, когда я пытаюсь запустить его, я получаю следующий вывод с трассировкой стека:

Reading table _OracletblColumn...
    colid   8   false
    tblid   8   false
    colname     12  false
    dbid    8   false

Reading table _OracletblDatabase...
    dbid    8   false
    dbname  12  false
    dbpathname  12  false

Reading table _OracletblTable...
    tblid   8   false
    dbid    8   false
    tblname     12  false

Reading table DICT_ACCOM...
java.io.IOException: The specified network name is no longer available
    at sun.nio.ch.FileDispatcher.pread0(Native Method)
    at sun.nio.ch.FileDispatcher.pread(FileDispatcher.java:35)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:195)
    at sun.nio.ch.IOUtil.read(IOUtil.java:171)
    at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:612)
    at com.healthmarketscience.jackcess.impl.PageChannel.readPage(PageChannel.java:211)
    at com.healthmarketscience.jackcess.impl.TempPageHolder.setPage(TempPageHolder.java:86)
    at com.healthmarketscience.jackcess.impl.TempPageHolder.setPage(TempPageHolder.java:74)
    at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.<init>(UsageMap.java:693)
    at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.<init>(UsageMap.java:673)
    at com.healthmarketscience.jackcess.impl.UsageMap.initHandler(UsageMap.java:146)
    at com.healthmarketscience.jackcess.impl.UsageMap.read(UsageMap.java:136)
    at com.healthmarketscience.jackcess.impl.UsageMap.read(UsageMap.java:108)
    at com.healthmarketscience.jackcess.impl.TableImpl.<init>(TableImpl.java:245)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readTable(DatabaseImpl.java:1538)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:849)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:526)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:393)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:252)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:291)
    at com.healthmarketscience.jackcess.util.LinkResolver$1.resolveLinkedDatabase(LinkResolver.java:42)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:1003)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:971)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:929)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:82)
    at com.ralph.sql.test1.migrateTableDefs(test1.java:51)
    at com.ralph.sql.test1.main(test1.java:24)

Я пробовал гуглить, но не нашел ни у кого такой же проблемы с Jackcess, что я делаю неправильно?


person Ralph    schedule 14.07.2016    source источник


Ответы (1)


При дальнейшем расследовании обнаружено, что приведенный выше код не является ошибкой.

Когда я переместил базу данных Access в другую папку, приведенный выше код отлично работает без трассировки стека. Моей первой мыслью были права доступа к файлам, я проверил, что у моего пользователя есть доступ для чтения/записи к базе данных (и к папке C:\temp), что он и сделал.

Оказалось, что мое корпоративное сканирование на вирусы (McAfee) выполняло какое-то сканирование при доступе, которое ломало его. Поскольку мне не разрешено отключать антивирусный сканер, я собираюсь переместить всю свою работу в папки внутри C:\users\username, поскольку сканирование на вирусы позволяет мне получить к ним доступ. Так много для того, чтобы иметь разрешение локального администратора, это не помогло.

person Ralph    schedule 14.07.2016