#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» У меня была такая же проблема, и я просто удалил его и создал новый с самого начала, но он зависал довольно часто, и это просто, так что попробуйте и скажите мне! Удачи