微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Kotlin Exposed时,如何处理sqlite数据库中数字的缺失值?

如何解决使用Kotlin Exposed时,如何处理sqlite数据库中数字的缺失值?

我有一个sqlite数据库,其输入类似于以下示例:

0|some_text0|123.456||some_other_text0
1|some_text1||456.789|some_other_text1

因此您可以看到第三和第四列是数字,但在某些记录中,该列中的数据为空。

我使用与此示例类似的方式定义了接口。

object Foos : IntIdTable("foos") {
    val sequelId = integer("id").primaryKey()
    val text0 = text("text0")
    val num0 = float("num0").nullable()
    val num1 = float("num1").nullable()
    val text1 = text("text1")
}

class Foo(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<Foo>(Foos)

    var sequelId by Foos.sequelId
    var text0 by Foos.text0
    var num0 by Foos.num0
    var num1 by Foos.num1
    var text1 by Foos.text
}

如果我查询包含缺失值的记录并尝试访问该字段,则会抛出异常,例如java.lang.String无法转换为java.math.Float?

例如:

val x = queryResult0.num1 //fails

我可以通过以下方式获得通过

val x = try { queryResult0.num1 } catch(e: Exception) { null } // works I get a value or null

我当前的“ hacky”解决方案是为诸如此类的字段添加第二组吸气剂:

 class Foo(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<Foo>(Foos)

    var sequelId by PinTimings.sequelId
    var text0 by Foos.text0
    var num0 by Foos.num0
    var num1 by Foos.num1
    var text1 by Foos.text
    val num0x : Float?
       get() = try { num0 } catch(e: Exception) { null } 
    val num1x : Float?
       get() = try { num1 } catch(e: Exception) { null }
 }

然后queryResut0.num1x提供了我所需要的。

处理这种情况的正确方法是什么?

仅供参考:我正在使用以下设置

  • 科特琳:1.2.61
  • 已暴露:org.jetbrains.exposed:已暴露:0.17.7
  • JDBC:org.xerial:sqlite-jdbc:3.32.3.2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。