如何在Kotlin中修复“造成原因:java.lang.IllegalStateException:在'only'中找不到元素”

时间:2019-08-05 09:44:48

标签: kotlin

我想从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")
    }
}

1 个答案:

答案 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()