首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kotlin中的jdbi3 withHandle抛出错误

kotlin中的jdbi3 withHandle抛出错误
EN

Stack Overflow用户
提问于 2019-07-28 18:30:00
回答 1查看 720关注 0票数 2

withHandle给出的错误是“没有足够的信息来推断类型变量X”。

但是如果我使用

代码语言:javascript
复制
val count = jdbi.withHandleUnchecked { handle ->
                    handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
                            .bind("ugradingLevel", ugradingLevel)
                            .mapTo(Int::class.java)
                            .findOnly()
                }

withHandleUnchecked它没有抛出任何错误。

下面是我的代码:(使用withHandle)

代码语言:javascript
复制
handle = jdbi.open() 
val names = jdbi.withHandle { handle ->
                    handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
                            .bind("ugradingLevel", ugradingLevel)
                            .mapTo(Int::class.java)
                            .findOnly()
                }
EN

回答 1

Stack Overflow用户

发布于 2019-07-29 20:15:22

今天早些时候我遇到了同样的问题。我花了一点时间才弄明白。

根据错误消息,编译器无法推断X是什么类型。X是useHandle方法的类型参数,用于指定HandleConsumer将返回的异常类型(如果有的话)。在Kotlin中,我们用匿名函数表示HandleConsumer,所以实际上这个类型参数应该是我们的lambda可能抛出的任何异常。如果您查看一下useHandle方法的定义,就会更容易理解您需要做什么:)。

因此,修复此错误的方法是在useHandle之后指定显式类型。

这应该会修复这个错误:

代码语言:javascript
复制
jdbi.useHandle<Exception> { handle ->
    handle.createQuery("SELECT count(*) FROM levelmaster WHERE `LevelName` = 'Silver' AND `LevelId` >= :ugradingLevel")
                            .bind("ugradingLevel", ugradingLevel)
                            .mapTo(Int::class.java)                            
                            .findOnly() 
}

这里的关键区别是jdbi.useHandle<Exception>{ ...

而不仅仅是jdbi.useHandle{ ...

我希望这对你有帮助!它肯定也让我被绊倒了一分钟。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57240002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档