我想从Kotlin中的数据库中选择一个值,但出现“原因:java.lang.IllegalStateException:'only'中找不到元素”错误。
我写了一个类,并且将map用作RowMapper
class MarketplaceGetEffectiveRateQuery(private val handle: Handle) {
fun run(resourceUUID: UUID,subscriptionUuid: UUID): BigDecimal {
return handle.createQuery(GET_EFFECTIVE_RATE_QUERY)
.bind("resourceUUID", resourceUUID)
.bind("ms_subscription_id", subscriptionUuid)
.map(EffectiveRateMapper())
.findOnly()
}
}
override fun map(rs: ResultSet, ctx: StatementContext): BigDecimal {
return rs.getBigDecimal("effective_rate")
}
}
答案 0 :(得分:1)
我假设您正在使用JDBI。 如果是这样,那绝对是正确的行为
public interface ResultIterable<T> extends Iterable<T> {
/**
* Get the only row in the result set.
* @throws IllegalStateException if zero or multiple rows are returned
* @return the object mapped from the singular row in the results
*/
default T findOnly() { ... }
}
注意@throws IllegalStateException 如果返回零或多个行
因此,当您完全确定查询总是产生单个结果时,只应使用findOnly()