从我的DB模式为DBUnit初始化创建一个Flat XML文件会引发异常

时间:2014-07-30 15:58:03

标签: dbunit

我试图使用DBUnit并为我的架构设置一个XML文件(空),以便我可以将它与我的DBUnit @DatabaseSetup注释一起使用。我得到以下异常:

Exception in thread "main" org.dbunit.dataset.DataSetException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'condition, gdfp_key, gdfp_value, min_value, max_value from gdfp_condition_mappin' at line 1
    at org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:323)
    at org.dbunit.database.DatabaseTableIterator.getTable(DatabaseTableIterator.java:89)
    at org.dbunit.dataset.stream.DataSetProducerAdapter.produce(DataSetProducerAdapter.java:83)
    at org.dbunit.dataset.xml.FlatXmlWriter.write(FlatXmlWriter.java:124)
    at org.dbunit.dataset.xml.FlatXmlDataSet.write(FlatXmlDataSet.java:378)
    at com.wfx.common.hsqldb.DatabaseToHSQLXml.main(DatabaseToHSQLXml.java:40)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'condition, gdfp_key, gdfp_value, min_value, max_value from gdfp_condition_mappin' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2758)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1612)
    at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:110)
    at org.dbunit.database.ForwardOnlyResultSetTable.<init>(ForwardOnlyResultSetTable.java:59)
    at org.dbunit.database.CachedResultSetTableFactory.createTable(CachedResultSetTableFactory.java:60)
    at org.dbunit.database.DatabaseDataSet.getTable(DatabaseDataSet.java:319)
    ... 5 more

我的数据库表如下所示:

DROP TABLE IF EXISTS `gdfp_condition_mapping`;
CREATE TABLE `gdfp_condition_mapping` (
  `gdfp_condition_mapping_id` int(32) NOT NULL AUTO_INCREMENT,
  `condition` varchar(255) NOT NULL,
  `gdfp_key` varchar(255) NOT NULL,
  `gdfp_value` varchar(255) DEFAULT NULL,
  `min_value` int(32) DEFAULT NULL,
  `max_value` int(32) DEFAULT NULL,
  PRIMARY KEY (`gdfp_condition_mapping_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我的代码如下:

public static void main(String[] args) throws Exception {

    Class driverClass = Class.forName("com.mysql.jdbc.Driver");
    Connection jdbcConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/hsqldb", "hsqldbuser", "hsqldbuser");

    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

    // full database export
    IDataSet fullDataSet = connection.createDataSet();
    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("DB_full.xml"));

}

任何想法的人? 感谢。

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为'condition'是一个保留关键字。将其更改为'condition_name'有效。