【问题标题】:Exporting an HSQLDB to XML using DBUnit results in null pointer errors使用 DBUnit 将 HSQLDB 导出到 XML 会导致空指针错误
【发布时间】:2011-04-27 20:33:36
【问题描述】:

我正在尝试使用 DBUnit 将我的数据库(一个 HSQLDB)的全部内容导出到 XML,但我遇到了我无法理解的空指针错误。我正在关注FAQ 中的示例:

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

最后一行出现空指针错误。 conn 和 DATABASE_PATH 不为空,因为它们都经过检查并稍后在程序中使用而没有问题(使用 OpenCSV 将数据库导出为 CSV,这完全符合预期)。

堆栈跟踪如下:

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

我在 Google 上搜索过,在导出过程中找不到与此类错误相关的任何信息。我对 SQL 或 JDBC 没有那么丰富的经验,所以我希望堆栈跟踪中有足够的信息,以便更有知识的人告诉我出了什么问题。如果有一些其他库可以更好地满足我的需求,那么切换我没有问题......我现在唯一需要的是使用 XML 导出/导入,所以我没有将 DBUnit 用于其他任何事情。无论如何,如果有人能告诉我出了什么问题,或者我是否应该使用其他东西,我将不胜感激。

【问题讨论】:

    标签: hsqldb dbunit


    【解决方案1】:

    这是特定版本的 HSQLDB 系统表创建中的错误,最近发现并更正了该错误。你可以试试http://hsqldb.org/support/更新的HSQLDB jar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多