Ошибка Apache derby db «Запрошенный конгломерат (1.744) не существует»

#java #derby

#java #дерби

Вопрос:

Я использую базу данных Apache derby для проекта Java, над которым я работаю.

Я создал таблицу EVALUATIONCOMS, и теперь я хочу вставить те же значения.

Я пытаюсь :

 public void instertEvalComments(String comment) {
    try {
        stmt = conn.createStatement();// create a Statement

        stmt.execute("INSERT INTO EVALUATIONCOMS" 
                      " VALUES ('"   comment   "')" );

        stmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
 

Но я получаю ошибку :

 java.sql.SQLException: The conglomerate (1.744) requested does not exist.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at gr.aueb.dmst.StopSpread.Database.insterIntoEvalComments(Database.java:242)
at gr.aueb.dmst.StopSpread.ServerClientThread.run(ServerClientThread.java:304)
Caused by: ERROR XSAI2: The conglomerate (1.744) requested does not exist.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.store.access.heap.HeapConglomerateFactory.readConglomerate(Unknown Source)
    at org.apache.derby.impl.store.access.CacheableConglomerate.setIdentity(Unknown Source)
    at org.apache.derby.impl.services.cache.ConcurrentCache.find(Unknown Source)
    at org.apache.derby.impl.store.access.RAMAccessManager.conglomCacheFind(Unknown Source)
    at org.apache.derby.impl.store.access.RAMTransaction.findConglomerate(Unknown Source)
    at org.apache.derby.impl.store.access.RAMTransaction.findExistingConglomerate(Unknown Source)
    at org.apache.derby.impl.store.access.RAMTransaction.getStaticCompiledConglomInfo(Unknown Source)
    at org.apache.derby.impl.sql.compile.InsertNode.makeConstantAction(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
    ... 4 more
 

Это первый раз, когда я сталкиваюсь с такой ошибкой, и я не знаю почему.

Я бы оценил вашу помощь.

ПРИМЕЧАНИЕ: я выполнил тот же метод, изменив только имя и столбцы для других таблиц, которые у меня есть в схеме, и все работало нормально. Также любой другой метод обработки базы данных, который я использую, также работает нормально.

Комментарии:

1. Вы пробовали перезапустить базу данных?

2. Просто сделал это, и у меня такая же ошибка

3. Я подозреваю, что это связано с таблицей, потому что я получаю такую ошибку, когда пытаюсь получить доступ к этой таблице, и у меня есть проблемы с другими таблицами

Ответ №1:

Это «не должно произойти». Ваша база данных каким-то образом повреждена, и по этим доказательствам трудно сказать, что произошло.

Возможно, ваш диск был заполнен? Возможно, у вас произошел сбой, и он не восстановился должным образом? Возможно, вы переместили базу данных Derby с одной части жесткого диска на другую, когда механизм Derby еще работал с этой базой данных? Боюсь, я просто предполагаю.

Каждая таблица или индекс в вашей базе данных физически хранится как «конгломерат», и каждый конгломерат представляет собой отдельный файл в папке базы данных на вашем жестком диске.

Вы можете узнать больше о том, какой конгломерат соответствует какой таблице или индексу в вашей базе данных, запросив sysconglomerates системное представление; объедините его с systables представлением, чтобы улучшить информацию. Видишь https://db.apache.org/derby/docs/10.15/ref/rrefsistabs39391.html и https://db.apache.org/derby/docs/10.15/ref/rrefsistabs24269.html

Во всяком случае, этот анализ поможет вам понять, какие таблицы повреждены, а какие файлы отсутствуют.

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

Ответ №2:

Вы пытались сначала удалить таблицу, а затем создать ее снова, а затем повторить попытку? Это команда «DROP EVALUATIONCOMS» У меня была такая же проблема, и я просто удалил его и создал новый с самого начала, но он зависал довольно часто, и это просто, так что попробуйте и скажите мне! Удачи