Экспорт HSQLDB в XML с использованием DBUnit приводит к ошибкам нулевого указателя

#hsqldb #dbunit

#hsqldb #dbunit

Вопрос:

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

 IDatabaseConnection xmlConnection = new DatabaseConnection(conn);
IDataSet allTables = xmlConnection.createDataSet();
XmlDataSet.write(allTables, new FileOutputStream(DATABASE_PATH   ".xml"));  

Ошибка нулевого указателя возникает в последней строке. conn и DATABASE_PATH не равны нулю, поскольку они оба проверены на это и используются позже в программе без проблем (экспорт базы данных в CSV с использованием OpenCSV, который работает идеально и точно так, как ожидалось).

Трассировка стека выглядит следующим образом:

 org.dbunit.dataset.DataSetException: java.sql.SQLException: java.lang.NullPointerException java.lang.NullPointerException
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:243)
    at org.dbunit.database.DatabaseDataSet.getTableNames(DatabaseDataSet.java:272)
    at org.dbunit.database.DatabaseDataSet.createIterator(DatabaseDataSet.java:258)
    at org.dbunit.dataset.AbstractDataSet.iterator(AbstractDataSet.java:189)
    at org.dbunit.dataset.stream.DataSetProducerAdapter.(DataSetProducerAdapter.java:63)
    at org.dbunit.dataset.xml.XmlDataSetWriter.write(XmlDataSetWriter.java:128)
    at org.dbunit.dataset.xml.XmlDataSet.write(XmlDataSet.java:104)
    at org.dbunit.dataset.xml.XmlDataSet.write(XmlDataSet.java:91)
    at pms.DatabaseExporter.exportToXML(DatabaseExporter.java:181)
    at pms.DatabaseExporter.main(DatabaseExporter.java:301)
Caused by: java.sql.SQLException: java.lang.NullPointerException java.lang.NullPointerException
    at org.hsqldb.jdbc.Util.sqlException(Util.java:224)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(JDBCStatement.java:1830)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(JDBCStatement.java:181)
    at org.hsqldb.jdbc.JDBCDatabaseMetaData.execute(JDBCDatabaseMetaData.java:6150)
    at org.hsqldb.jdbc.JDBCDatabaseMetaData.getTables(JDBCDatabaseMetaData.java:3170)
    at org.dbunit.database.DefaultMetadataHandler.getTables(DefaultMetadataHandler.java:137)
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:199)
    ... 9 more
Caused by: org.hsqldb.HsqlException: java.lang.NullPointerException
    at org.hsqldb.error.Error.error(Error.java:108)
    at org.hsqldb.result.Result.newErrorResult(Result.java:1069)
    at org.hsqldb.StatementDMQL.execute(StatementDMQL.java:192)
    at org.hsqldb.Session.executeCompiledStatement(Session.java:1315)
    at org.hsqldb.Session.executeDirectStatement(Session.java:1206)
    at org.hsqldb.Session.execute(Session.java:990)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(JDBCStatement.java:1822)
    ... 14 more
Caused by: java.lang.NullPointerException
    at org.hsqldb.types.CharacterType.compare(CharacterType.java:418)
    at org.hsqldb.index.IndexAVL.compareRowForInsertOrDelete(IndexAVL.java:617)
    at org.hsqldb.index.IndexAVLMemory.insert(IndexAVLMemory.java:214)
    at org.hsqldb.persist.RowStoreAVL.indexRow(RowStoreAVL.java:171)
    at org.hsqldb.persist.RowStoreAVLHybridExtended.indexRow(RowStoreAVLHybridExtended.java:99)
    at org.hsqldb.Table.insertSys(Table.java:2625)
    at org.hsqldb.dbinfo.DatabaseInformationMain.SYSTEM_TABLES(DatabaseInformationMain.java:2353)
    at org.hsqldb.dbinfo.DatabaseInformationMain.generateTable(DatabaseInformationMain.java:348)
    at org.hsqldb.dbinfo.DatabaseInformationFull.generateTable(DatabaseInformationFull.java:379)
    at org.hsqldb.dbinfo.DatabaseInformationMain.setStore(DatabaseInformationMain.java:507)
    at org.hsqldb.persist.PersistentStoreCollectionSession.getStore(PersistentStoreCollectionSession.java:138)
    at org.hsqldb.Table.getRowStore(Table.java:2817)
    at org.hsqldb.RangeVariable$RangeIteratorMain.(RangeVariable.java:939)
    at org.hsqldb.RangeVariable$RangeIteratorMain.(RangeVariable.java:917)
    at org.hsqldb.RangeVariable.getIterator(RangeVariable.java:770)
    at org.hsqldb.QuerySpecification.buildResult(QuerySpecification.java:1293)
    at org.hsqldb.QuerySpecification.getSingleResult(QuerySpecification.java:1245)
    at org.hsqldb.QuerySpecification.getResult(QuerySpecification.java:1235)
    at org.hsqldb.StatementQuery.getResult(StatementQuery.java:66)
    at org.hsqldb.StatementDMQL.execute(StatementDMQL.java:190)
    ... 18 more  

Я погуглил и не смог найти ничего, относящегося к такого рода ошибкам во время экспорта. У меня нет такого опыта работы с SQL или JDBC, поэтому я надеюсь, что в трассировке стека достаточно информации, чтобы кто-то более осведомленный сказал мне, что происходит не так. Если есть какая-то другая библиотека, которая была бы лучше для моих нужд, у меня нет проблем с переключением… Единственное, что мне нужно, это экспорт / импорт с XML прямо сейчас, поэтому я не использую DBUnit ни для чего другого. В любом случае, если кто-нибудь может сказать мне, что происходит не так, или если я должен использовать что-то другое, я был бы очень признателен.

Ответ №1:

Это ошибка в конкретной версии создания системной таблицы HSQLDB, которая была недавно обнаружена и исправлена. Вы можете попробовать обновленный файл HSQLDB jar с http://hsqldb.org/support /