使用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 (将#修改为@)