PostgreSQL表data
的{{1}}列格式为my_table
。我想插入Scala jsonb
(或JsObject
),但不知道该怎么做!
以下代码无法编译,因为JsValue
函数希望on
为json
:
String
解决方案是什么?
答案 0 :(得分:2)
在值的末尾使用 :: jsonb 标记。例如
//my scala variables
val jsonDescription: String = "{\"name\":\"ksulr\"}"
val age = 15
//my insert statement
val sql = "INSERT into person(json_description,age) VALUES(?::jsonb,?)"
//prepared statement
val statement = conn.prepareStatement(sql)
//insert values into the sql statement
statement.setString(1,jsonDescription)
statement.setInt(2,age)
statement.executeUpdate()
这会奏效。它对我有用。这就是我如何插入postgres db
类型的jsonb
列。
答案 1 :(得分:0)
您可以使用ToStatement转换器对象:
def add(json: JsObject): Option[Long] = {
DB.withConnection { implicit c =>
val query = """insert into my_table(data) values(${data});"""
SQL(query).executeInsert()
}
}
implicit object jsObjectStatement extends ToStatement[JsObject] {
override def set(s: PreparedStatement, index: Int, v: JsObject): Unit = {
val jsonObject = new PGobject()
jsonObject.setType("json")
jsonObject.setValue(Json.stringify(v))
s.setObject(index, jsonObject)
}
}