0

I'm trying to insert a large amount of records in my inverted index which has built as table in MS access database. This is table design (ID,term,doc,sent is compound primary key): image1

and this is the code:

Connection conn = DriverManager.getConnection("jdbc:ucanaccess://myDB.accdb");
        Statement s = conn.createStatement();
        s.execute("DELETE FROM invertedIndex");

for(String o : POSoutputs) //while (Tokenizer.hasMoreTokens())
                    {
                        String word = o;

                        s.execute("insert into invertedIndex (term,doc,sent) values ('"+ o + "','" + listOfFiles[i].getAbsolutePath() + "','" + fileText + "')");

                        conn.commit();// i do commit to empty the stack because i will insert thousands of records, by scanning hundreds of documents. 
                    }

This is the Error:

java.lang.StackOverflowError
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:297)
at java.nio.ByteBuffer.put(ByteBuffer.java:832)
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:379)
at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:342)
at sun.nio.ch.IOUtil.write(IOUtil.java:60)
at sun.nio.ch.FileChannelImpl.writeInternal(FileChannelImpl.java:778)
at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:761)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:350)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115) 
........ ERROR RECORDS ARE DUPLICATED .. etc

what's the problem?

Minions
  • 5,104
  • 5
  • 50
  • 91

2 Answers2

0

The error is clear: ERROR RECORDS ARE DUPLICATED

So you have a unique index on one or more fields. Either remove this or remove the records with duplicate field values.

Gustav
  • 53,498
  • 7
  • 29
  • 55
0

The database was corrupted, i have created another one with the same tables .. I think the reason is because the answered query in this question: How to restart counting from 1 after erasing table in MS Access?, which have damage the structural indices of the database. A similar issue is in: deleting row with BigIndex UsageMap exception

Community
  • 1
  • 1
Minions
  • 5,104
  • 5
  • 50
  • 91