2016-07-14 10 views
2

Access 데이터베이스에서 테이블과 열의 압축을 풀기 위해 간단한 Java 프로그램을 작성하려고합니다. 내가 스택 트레이스 다음과 같은 출력을 얻을 그것을 실행하려고 할 때"지정된 네트워크 이름을 더 이상 사용할 수 없습니다"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 요리 책을 사용하여 Jackcess와 똑같은 문제가있는 사람, 내가 뭘 잘못하고 있니?

답변

1

추가 조사에서 위의 코드가 잘못 되었음이 확인되었습니다.

Access 데이터베이스를 다른 폴더로 옮길 때 위의 코드는 스택 트레이싱없이 완벽하게 작동합니다. 내 첫 번째 생각은 파일 권한이었고, 내 사용자가 데이터베이스 (및 C : \ temp 폴더)에 대한 읽기/쓰기 액세스 권한이 있는지 확인했습니다.

내 회사 바이러스 검사 (McAfee)가이를 어기는 액세스 검사에 대해 일종의 일을했다. 바이러스 스캐너를 비활성화 할 수 없으므로 모든 작업을 C : \ users \ username 폴더로 옮길 것입니다. 바이러스 검사를 통해 이러한 파일에 액세스 할 수 있습니다. 로컬 관리자 권한으로 인해 많은 도움이되지 않았습니다.