gpt4 book ai didi

java - org.dbunit.dataset.NoSuchTableException错误DatabaseDataSet-未找到表“行程”

转载 作者:行者123 更新时间:2023-11-29 03:29:40 26 4
gpt4 key购买 nike

我一直在bing / google(布尔)搜索中,发现一些命中(主要是在stackoverflow上),并且尝试使用建议的解决方案没有任何运气。

我正在使用Java 8和DBUnit 2.5.1和mysql-connector-java 5.1.36和mysql(针对Win64(x86_64)的版本14.14 Distrib 5.6.15)。

我正在读取以前由DBUnit创建的XML文件,该文件定义了多个表,其中一个表称为“行程”。我的mysql实例有一个名为“dbunit”的空数据库,我的期望是我的代码将读取XML,并使用XML文件中的表和表行填充数据库“dbunit”。

这是dbunit从mysql数据库“pocketguide3rded”(基于《 SQL Pocket Guide 3rd Edition》一书)创建的数据文件的一部分。

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<trip name="M-28" stop="1" parent_stop="3"/>
<trip name="M-28" stop="3"/>
<trip name="M-28" stop="8" parent_stop="1"/>
<trip name="M-28" stop="9" parent_stop="8"/>
<trip name="M-28" stop="10" parent_stop="9"/>
<trip name="M-28" stop="11" parent_stop="10"/>
<trip name="Munising" stop="1"/>
<trip name="Munising" stop="2" parent_stop="1"/>
<trip name="Munising" stop="3" parent_stop="4"/>
<trip name="Munising" stop="4" parent_stop="6"/>
<trip name="Munising" stop="5" parent_stop="3"/>
<trip name="Munising" stop="6" parent_stop="2"/>
<trip name="US-2" stop="11" parent_stop="12"/>
<trip name="US-2" stop="12" parent_stop="14"/>
<trip name="US-2" stop="13" parent_stop="11"/>
<trip name="US-2" stop="14"/>
</dataset>

这是我的代码。
    public static void fullDatabaseImport(File file) throws     ClassNotFoundException, 
DatabaseUnitException,
IOException,
SQLException {
IDatabaseConnection connection = getConnection();
IDataSet dataSet = new FlatXmlDataSet(file, true);

DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
//DatabaseOperation.INSERT.execute(connection, dataSet);
}

public static IDatabaseConnection getConnection() throws ClassNotFoundException,
DatabaseUnitException,
SQLException {
// database connection
Class driverClass = Class.forName(_driverClass);
Connection jdbcConnection = DriverManager.getConnection(_jdbcConnection, username, password);
IDatabaseConnection dbConn = new DatabaseConnection(jdbcConnection/*,"dbunit"*/);
dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler());
dbConn.getConfig().setProperty(DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES, Boolean.TRUE);

return dbConn;
}

我在调用CLEAN_INSERT.execute时遇到此异常。

这是我尝试运行junit测试的输出。

JUnit版本4.11

.ERROR DatabaseDataSet-在tableMap = org.dbunit.dataset.OrderedTableNameMap [_tableNames = [],_ tableMap = {},_ caseSensitiveTableNames = true]中找不到表“行程”

Ë

时间:0.464

有1个失败:

1)test5_Test(com.heintze.demos.wikidot_com_demoimportexport.DemoDBUnit)

org.dbunit.dataset.NoSuchTableException:旅行
在org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)的org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
在org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
在com.heintze.demos.wikidot_com_demoimportexport.DemoDBUnit.fullDatabaseImport(DemoDBUnit.java:265)
在com.heintze.demos.wikidot_com_demoimportexport.DemoDBUnit.test5_Test(DemoDBUnit.java:249)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:483)
在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:47)
在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)
在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:63)
在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:53)
在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:229)
在org.junit.runners.ParentRunner.run(ParentRunner.java:309)
在org.junit.runners.Suite.runChild(Suite.java:127)
在org.junit.runners.Suite.runChild(Suite.java:26)
在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)
在org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:63)
在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:53)
在org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:229)
在org.junit.runners.ParentRunner.run(ParentRunner.java:309)
在org.junit.runner.JUnitCore.run(JUnitCore.java:160)
在org.junit.runner.JUnitCore.run(JUnitCore.java:138)
在org.junit.runner.JUnitCore.run(JUnitCore.java:117)
在org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
在org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
在org.junit.runner.JUnitCore.main(JUnitCore.java:40)

失败!!!
测试运行:1,失败:1

/ cygdrive / c / Users / siegfried / Documents / spring-tool-suite-workspaces / DBUnitDemo / wikidot-com-demoimportexport / src / test / java / com / heintze / demos / wikidot_com_demoimportexport

最佳答案

问题在于DBUnit只是用数据填充表。它实际上并没有创建表。我通过像这样重写getSetupOperation来解决此问题:

@Override
protected DatabaseOperation getSetUpOperation() throws Exception
{
dbConnection = DriverManager.getConnection("jdbc:hsqldb:mem:tests", "sa", "");
createTables();
return DatabaseOperation.REFRESH;
}

private void createTables() throws Exception {
PreparedStatement statement = dbConnection
.prepareStatement("CREATE TABLE digidauthsessions ( "
+ "id INTEGER IDENTITY NOT NULL PRIMARY KEY,"
+ "request_token VARCHAR(50) NOT NULL,"
+ "response_token VARCHAR(50) NOT NULL,"
+ "relatienr VARCHAR(50) NOT NULL,"
+ "digidnameid VARCHAR(1000) NOT NULL" + ")");
statement.execute();
statement.close();
}

在这里,在getSetupOperation中,我直接连接到我的hsql测试数据库。通过该连接,我可以调用实际创建表的createTables方法。这是通过此重写方法完成的,因为这样可以确保始终在创建表之前创建表。

关于java - org.dbunit.dataset.NoSuchTableException错误DatabaseDataSet-未找到表“行程”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com