вставка записей в базу данных MS Access

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

и это код:

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

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


person user_007    schedule 29.01.2017    source источник


Ответы (2)


Ошибка ясна: ЗАПИСИ ОШИБОК ДУБЛИРУЮТСЯ

Итак, у вас есть уникальный индекс для одного или нескольких полей. Либо удалите это, либо удалите записи с повторяющимися значениями полей.

person Gustav    schedule 29.01.2017
comment
У меня есть составной первичный ключ! на всех полях! это проблема !? - person user_007; 29.01.2017
comment
А они есть!, даже просто по ID - person user_007; 29.01.2017
comment
Возможно, истинной ошибкой является StackOverflowError. Если это так, вы должны попробовать другой метод или, по крайней мере, петли меньшего размера. - person Gustav; 30.01.2017

База данных была повреждена, я создал еще одну с теми же таблицами. Я думаю, причина в том, что ответ на этот вопрос: Как перезапустить отсчет с 1 после стирания таблицы в MS Access?, которые повредили структурные индексы базы данных. Аналогичная проблема возникает при удалении строки с исключением BigIndex UsageMap

person user_007    schedule 29.01.2017