无法模拟 0 行导致 jOOQ
Cannot mock 0 rows result in jOOQ
我在使用 jOOQ(版本 3.12.3
)模拟空结果时遇到问题。我使用 MockDataProvider
,但它仍然是 return 一行。
这是MockDataProvider
的代码:
class DataProvider implements MockDataProvider {
@Override
public MockResult[] execute(MockExecuteContext ctx) {
return new MockResult[]{new MockResult(0, null)};
}
}
var dbContext = DSL.using(new MockConnection(new DataProvider()));
//....
所以它应该 return 0 行,这就是所需要的。但是,它实际上 returns 1 行,0
作为值。
12:51:34.799 [main] DEBUG org.jooq.tools.LoggerListener - Affected row(s) : 0
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - Fetched result : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : |metadata|
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : |0 |
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - Fetched row(s) : 1
非常感谢任何帮助或建议。
您的 MockResult
实例对 0
的更新计数进行编码以用于 DML 语句,而不是具有 0
行的结果集。为此,您必须创建:
new MockResult(0, result)
或者
Mock.of(result)
有
// some mock DSLContext configuration, as simple as DSL.using(SQLDialect.H2)
DSLContext ctx = ...
Result<Record> result = ctx.newResult(field1, field2);
在很多情况下,即使结果集是空的,jOOQ 也需要知道你的结果集的列名和类型。这些也存在于任何普通的空 SQL 结果集中。
我在使用 jOOQ(版本 3.12.3
)模拟空结果时遇到问题。我使用 MockDataProvider
,但它仍然是 return 一行。
这是MockDataProvider
的代码:
class DataProvider implements MockDataProvider {
@Override
public MockResult[] execute(MockExecuteContext ctx) {
return new MockResult[]{new MockResult(0, null)};
}
}
var dbContext = DSL.using(new MockConnection(new DataProvider()));
//....
所以它应该 return 0 行,这就是所需要的。但是,它实际上 returns 1 行,0
作为值。
12:51:34.799 [main] DEBUG org.jooq.tools.LoggerListener - Affected row(s) : 0
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - Fetched result : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : |metadata|
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : |0 |
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - : +--------+
12:51:34.863 [main] DEBUG org.jooq.tools.LoggerListener - Fetched row(s) : 1
非常感谢任何帮助或建议。
您的 MockResult
实例对 0
的更新计数进行编码以用于 DML 语句,而不是具有 0
行的结果集。为此,您必须创建:
new MockResult(0, result)
或者
Mock.of(result)
有
// some mock DSLContext configuration, as simple as DSL.using(SQLDialect.H2)
DSLContext ctx = ...
Result<Record> result = ctx.newResult(field1, field2);
在很多情况下,即使结果集是空的,jOOQ 也需要知道你的结果集的列名和类型。这些也存在于任何普通的空 SQL 结果集中。