Java &引用;指定的网络名称不再可用";使用Jackcess时

Java &引用;指定的网络名称不再可用";使用Jackcess时,java,jackcess,Java,Jackcess,我正试图编写一个简单的Java程序来从Access数据库中提取表和列。使用Jackcess食谱,我得到了以下信息: String sourceDatabase = "C:\\temp\\test1.mdb"; Database accessDB = DatabaseBuilder.open(new File(sourceDatabase)); // Loop through the tables Set<String>

我正试图编写一个简单的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();
String sourceDatabase=“C:\\temp\\test1.mdb”;
Database accessDB=DatabaseBuilder.open(新文件(sourceDatabase));
//循环浏览表格
Set accessTables=accessDB.getTableNames();
for(字符串currentTable:accessTables){
System.out.println(“读取表”+当前表+”);
Table Table=accessDB.getTable(currentTable);//这是stacktrace出现的第51行
//循环浏览当前表中的列
for(列:table.getColumns()){
字符串columnName=column.getName();
整数colType=column.getSQLType();
布尔值isAutoNumber=列。isAutoNumber();
System.out.println(“\t”+columnName+“\t”+sqlTypeToText(colType)+“\t”+isAutoNumber);
}
System.out.println(“”);
}
accessDB.close();
但是,当我尝试运行它时,我会通过stacktrace获得以下输出:

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)
读取表格\u或列。。。
colid 8错误
tblid 8错误
colname 12 false
DBID8错误
正在读取表\u OracletblDatabase。。。
DBID8错误
dbname 12 false
dbpathname 12 false
阅读表\u或可伸缩表。。。
tblid 8错误
DBID8错误
tblname 12错误
阅读表目录会计。。。
java.io.IOException:指定的网络名称不再可用
位于sun.nio.ch.FileDispatcher.pread0(本机方法)
位于sun.nio.ch.FileDispatcher.pread(FileDispatcher.java:35)
位于sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:195)
位于sun.nio.ch.IOUtil.read(IOUtil.java:171)
位于sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:612)
在com.healthmarketscience.jackcess.impl.PageChannel.readPage(PageChannel.java:211)上
在com.healthmarketscience.jackcess.impl.TempPageHolder.setPage(TempPageHolder.java:86)
在com.healthmarketscience.jackcess.impl.TempPageHolder.setPage(TempPageHolder.java:74)
在com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler上(UsageMap.java:693)
在com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler上(UsageMap.java:673)
位于com.healthmarketscience.jackcess.impl.UsageMap.initHandler(UsageMap.java:146)
请访问com.healthmarketscience.jackcess.impl.UsageMap.read(UsageMap.java:136)
请访问com.healthmarketscience.jackcess.impl.UsageMap.read(UsageMap.java:108)
在com.healthmarketscience.jackcess.impl.TableImpl.(TableImpl.java:245)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.readTable(DatabaseImpl.java:1538)
在com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:849)上
在com.healthmarketscience.jackcess.impl.DatabaseImpl.(DatabaseImpl.java:526)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:393)
位于com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:252)
位于com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:291)
位于com.healthmarketscience.jackcess.util.LinkResolver$1.resolveLinkedDatabase(LinkResolver.java:42)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:1003)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:971)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:929)
位于com.healthmarketscience.jackcess.impl.DatabaseImpl.getTable(DatabaseImpl.java:82)
位于com.ralph.sql.test1.migrateTableDefs(test1.java:51)
位于com.ralph.sql.test1.main(test1.java:24)

我尝试过谷歌搜索,但没有发现其他人与Jackcess有同样的问题,我做错了什么?

进一步调查发现上述代码没有错

当我将Access数据库移动到另一个文件夹时,上面的代码可以在没有堆栈跟踪的情况下完美地工作。我的第一个想法是文件权限,我检查了我的用户对数据库(以及C:\temp文件夹)的读/写访问权限

原来是我的公司病毒扫描(McAfee)做了某种访问扫描破坏了它。由于不允许我禁用病毒扫描程序,我将把所有工作移到C:\users\username中的文件夹中,因为病毒扫描允许我访问这些文件夹。有了本地管理员的许可,这没什么帮助