kotlin 公开的数据库库:使用 Potgresql 'inet' 类型插入

问题描述 投票:0回答:1

从 Exposed 和 Postgresql 开始。

创建表对象、连接到数据库和执行查询没有问题。但我不确定如何处理 Postgresql 特定类型。

我有一个名为“sender-ip”的 inet col,并尝试使用 IP 地址作为字符串插入

IPList.insert {
    it[sender_ip] = "127.0.0.1"
}

但是,插入时出错:

Exception in thread "main" org.jetbrains.exposed.exceptions.ExposedSQLException: org.postgresql.util.PSQLException: ERROR: column "sender_ip" is of type inet but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.

通过阅读 Exposed 文档,我发现有一种方法可以编写和执行原始 SQL。但是,有没有更好的方法来处理这种类型?

postgresql kotlin jdbc ip-address kotlin-exposed
1个回答
0
投票

试试这个

class InetColumnType : StringColumnType() {
    override fun sqlType(): String = "INET"

    override fun setParameter(stmt: PreparedStatementApi, index: Int, value: Any?) {
        val parameterValue: PGobject? = value?.let {
            PGobject().apply {
                type = sqlType()
                this.value = value as? String
            }
        }
        super.setParameter(stmt, index, parameterValue)
    }
}
fun Table.inet(name: String): Column<String> = registerColumn(name, InetColumnType())

您可以在表格中使用它,如下所示

val ip = inet("sender_ip")
© www.soinside.com 2019 - 2024. All rights reserved.