0

我正在尝试JDBIPostgreSQL数据库一起使用。我正在使用Kotlin. 即使尝试了几个小时,我也无法使用基本的 CRUD 操作。

 val users = jdbi.withHandleUnchecked {
     it
        .createQuery("select id, name from users")
        .mapToBean(User::class.java)
        .list()
 }

这是我正在使用的代码。(连接没有问题。我已经通过使用执行查询验证了这一点JDBC

这是模型类,

data class User(val id: Int, val name: String)

这是我得到的例外,

Exception in thread "main" java.lang.NoSuchMethodException: no such constructor: User.<init>()void/newInvokeSpecial
    at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:961)
    at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1101)
    at java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:2030)
    at java.base/java.lang.invoke.MethodHandles$Lookup.findConstructor(MethodHandles.java:1264)
    at org.jdbi.v3.core.mapper.reflect.internal.BeanPropertiesFactory$BeanPojoProperties$PropertiesHolder.<init>(BeanPropertiesFactory.java:202)
    at org.jdbi.v3.core.config.JdbiCaches.lambda$declare$0(JdbiCaches.java:49)
    at org.jdbi.v3.core.config.JdbiCaches$1.lambda$get$1(JdbiCaches.java:63)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
    at org.jdbi.v3.core.config.JdbiCaches$1.get(JdbiCaches.java:63)
    at org.jdbi.v3.core.mapper.reflect.internal.BeanPropertiesFactory$BeanPojoProperties.getProperties(BeanPropertiesFactory.java:81)
    at org.jdbi.v3.core.mapper.reflect.internal.PojoMapper.specialize0(PojoMapper.java:99)
    at org.jdbi.v3.core.mapper.reflect.internal.PojoMapper.specialize(PojoMapper.java:80)
    at org.jdbi.v3.core.result.ResultSetResultIterator.<init>(ResultSetResultIterator.java:38)
    at org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:54)
    at org.jdbi.v3.core.result.ResultIterable.stream(ResultIterable.java:228)
    at org.jdbi.v3.core.result.ResultIterable.collect(ResultIterable.java:284)
    at org.jdbi.v3.core.result.ResultIterable.list(ResultIterable.java:273)
    at MainKt$main$$inlined$withHandleUnchecked$1.withHandle(Jdbi858Extensions.kt:185)
    at org.jdbi.v3.core.Jdbi.withHandle(Jdbi.java:342)
    at MainKt.main(Main.kt:26)
    at MainKt.main(Main.kt)
Caused by: java.lang.NoSuchMethodError: User: method 'void <init>()' not found
    at java.base/java.lang.invoke.MethodHandleNatives.resolve(Native Method)
    at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:1070)
    at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1098)
    ... 19 more

Process finished with exit code 1

貌似跟User班级有关系。所以,我试着修补它。

我在哪里尝试过,(从更改varval

data class User(var id: Int, var name: String)

抛出的异常与上面相同。

这是我的依赖部分的gradle.build样子,

dependencies {
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31'
    implementation 'org.postgresql:postgresql:42.3.0'
    implementation 'org.jdbi:jdbi3-kotlin-sqlobject:3.23.0'
    implementation 'com.zaxxer:HikariCP:5.0.0'
    implementation 'org.slf4j:slf4j-jdk14:1.7.32'
}

任何帮助都会非常有帮助。

4

0 回答 0