2017-01-29 2 views
0

Я пытаюсь вставить большое количество записей в мой инвертированный индекс, который был создан как таблица в базе данных доступа MS. Это дизайн таблицы (ID, термин, документ, посланный является соединение первичного ключа): image1записи вставки в базе данных доступа MS

и это код:

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. 
        } 

Это ошибка:

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 

что проблема?

ответ

0

Ошибка ясна: ОШИБКА ЗАПИСИ продублированы

Так у вас есть уникальный индекс по одному или нескольким полям. Удалите это или удалите записи с повторяющимися значениями полей.

+0

У меня есть первичный ключ! на всех полях! это проблема !? –

+0

Нет. Но ваши вставленные ключи должны быть уникальными. – Gustav

+0

И они есть !, даже просто ID –

0

База данных была повреждена, я создал другую с теми же таблицами. Я думаю, причина в том, что ответ на этот вопрос в этом вопросе: How to restart counting from 1 after erasing table in MS Access?, которые повреждают структурные индексы базы данных. Аналогичная проблема находится в: deleting row with BigIndex UsageMap exception