通过Scala Anorm将数据插入PostgreSQL jsonb列(在Play框架中)

时间:2015-01-21 08:20:30

标签: postgresql scala playframework anorm

PostgreSQL表data的{​​{1}}列格式为my_table。我想插入Scala jsonb(或JsObject),但不知道该怎么做!

以下代码无法编译,因为JsValue函数希望onjson

String

解决方案是什么?

2 个答案:

答案 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)
    }
  }