从 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。但是,有没有更好的方法来处理这种类型?
试试这个
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")