玩!框架/规范:将数据转换为JSON并存储到数据库中

迈克·汉克

第一次使用play框架,我正在努力将已转换为JSON的数据保存到在框架中建立的数据库中。

这是我正在尝试的:

Controller

//Write converter to convert our model data to JSON
implicit val taskWrites: Writes[Task] = (
    (JsPath \ "id").write[Int] and
    (JsPath \ "name").write[String] and
    (JsPath \ "description").write[String] and
    (JsPath \ "group").write[String]
    )(unlift(Task.unapply))



//saving tasks in JSON format. Returning OK if success.
def saveTask = Action(BodyParsers.parse.json) { request =>
    val taskResult = request.body.validate[Task]
    taskResult.fold(
        errors => {
            BadRequest(Json.obj("status" -> "KO", "Message" -> JsError.toJson(errors)))
        },
        task => {
            Task.save(task)
            //ERROR HERE: Task.insertIntoDB(task)
            Ok(Json.obj("status" -> "Ok", "Message" -> ("Task '" +task.name+ "' saved")))
        }
    )
}

Model

case class Task(id: Int, name: String, description: String, group: String)

var list: List[Task] = Nil

//define a parser that will transform a JDBC ResultSet into a Task value.
val task = {
    get[Int]("id") ~
    get[String]("name") ~
    get[String]("description") ~
    get[String]("group") map {
        case id~name~description~group => Task(id, name, description, group)
    }

}

def save(task: Task) = {
    list = list ::: List(task)
}

def insertIntoDB(task: Task){
    DB.withConnection { implicit c =>
        SQL("insert into task (id, name, description, groupname) values ({task.id, task.name, task.description, task.group})").on(
            'id -> task.id,
            'name -> task.name,
            'description -> task.description,
            'groupname -> task.group
            ).executeUpdate()
    }
}

我正在使用H2数据库引擎

evolutions/default/1.sql

#Tasks Schema

# ---- !Ups
CREATE SEQUENCE task_id_seq;
CREATE TABLE task (
    id integer NOT NULL DEFAULT nextval('task_id_seq'),
    name varchar(255),
    description varchar(255),
    groupname varchar(255)
);

# ---- !Downs
DROP SEQUENCE task_id_seq;
DROP TABLE task;

但是当我尝试添加新任务时:

curl --include --request POST --header "content-type: application/json" --data '{"id":4, "name": "test5", "description": "testdesc1","group": "groupc"}' http://localhost:9000/tasks

我收到错误:

[JdbcSQLException: Syntax error in SQL statement "INSERT INTO TASK (ID, NAME, DESCRIPTION, GROUPNAME) VALUES ( [*]"; expected "), DEFAULT, NOT, EXISTS, INTERSECTS"; SQL statement: insert into task (id, name, description, groupname) values ( [42001-191]]

我什至正确地做到了吗?忽略错误,我不这么认为。我如何结合saveinsertIntoDB

另外,如何测试添加数据而不必每次都卷曲?

谢谢您的帮助!

编辑:添加架构+新错误

房东

问题是您在执行插入操作时使用了错误的名称/密钥:

您的代码:

def insertIntoDB(task: Task) {
  DB.withConnection { implicit c =>
    SQL("insert into task (id, name, description, groupname) values ({task.id, task.name, task.description, task.group})").on(
      'id -> task.id,
      'name -> task.name,
      'description -> task.description,
      'groupname -> task.group
    ).executeUpdate()
  }
}

问题是:

  1. 插入模板错误。假定{}用于每个变量
  2. 在模板(使用的密钥task.id)不匹配所使用的那些onid

您可以重写为:

def insertIntoDB(task: Task) {
  DB.withConnection { implicit c =>
    SQL("insert into task (id, name, description, groupname) values ({id}, {name}, {description}, {groupname})").on(
      'id -> task.id,
      'name -> task.name,
      'description -> task.description,
      'groupname -> task.group
    ).executeUpdate()
  }
}

或者甚至可以缩写为:

def insertIntoDB(task: Task) {
  DB.withConnection { implicit c =>
    SQL("insert into task (id, name, description, groupname) values (${task.id}, ${task.name}, ${task.description}, ${task.group})").executeUpdate()
  }
}

我强烈建议您在此处阅读Anorm文档:

https://www.playframework.com/documentation/2.5.x/ScalaAnorm

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 Json 文件转换为 C# 并存储在数据库中

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

如何将视频转换为ogg和mp4并存储在数据库中

来自分类Dev

如何将视频转换为ogg和mp4并存储在数据库中

来自分类Dev

Android JSON解析并存储到数据库

来自分类Dev

从datagridview转换一个空的空整数并存储到数据库中

来自分类Dev

如何解析嵌套的json并存储到mysql数据库中?

来自分类Dev

将数据库转换为JSON

来自分类Dev

在“主要”操作中将数据存储到会话中并存储到数据库

来自分类Dev

如何将javascript的值传递到PHP变量中并存储到mysql数据库中?

来自分类Dev

将IPv6转换为二进制文件后将其存储到数据库中

来自分类Dev

如何将具有getter / setter的TypeScript类实例转换为JSON以存储在MySQL数据库中

来自分类Dev

如何通过curl get从api中的api将json数据存储到数据库中?

来自分类Dev

Perl:处理大文件并存储到数据库中

来自分类Dev

将json数据存储到数据库中以减少互联网费用

来自分类Dev

将JSON数据存储到android中的本地数据库

来自分类Dev

将JSON数据存储到android中的本地数据库

来自分类Dev

将 json 数据存储到数据库中的最佳实践

来自分类Dev

如何将图像存储到文件系统(在Internet上)并存储到数据库的路径?

来自分类Dev

nodejs:从文件读取并存储到数据库,限制最大并发数据库操作

来自分类Dev

nodejs:从文件读取并存储到数据库,限制最大并发数据库操作

来自分类Dev

如何将字符串转换为可以存储在数据库中的日期?

来自分类Dev

如何将 jQuery 范围滑块值转换为表单以存储在 Django 的数据库中

来自分类Dev

如何上传图片并存储在数据库中

来自分类Dev

禁用按钮并存储在数据库中

来自分类Dev

解析嵌套的 Json 对象并存储在 Android 中的数据库中

来自分类Dev

将图像上传到服务器并存储在MySQL数据库中

来自分类Dev

将 json 内容从 API 存储到 mysql 数据库

Related 相关文章

  1. 1

    将 Json 文件转换为 C# 并存储在数据库中

  2. 2

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  3. 3

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  4. 4

    如何将视频转换为ogg和mp4并存储在数据库中

  5. 5

    如何将视频转换为ogg和mp4并存储在数据库中

  6. 6

    Android JSON解析并存储到数据库

  7. 7

    从datagridview转换一个空的空整数并存储到数据库中

  8. 8

    如何解析嵌套的json并存储到mysql数据库中?

  9. 9

    将数据库转换为JSON

  10. 10

    在“主要”操作中将数据存储到会话中并存储到数据库

  11. 11

    如何将javascript的值传递到PHP变量中并存储到mysql数据库中?

  12. 12

    将IPv6转换为二进制文件后将其存储到数据库中

  13. 13

    如何将具有getter / setter的TypeScript类实例转换为JSON以存储在MySQL数据库中

  14. 14

    如何通过curl get从api中的api将json数据存储到数据库中?

  15. 15

    Perl:处理大文件并存储到数据库中

  16. 16

    将json数据存储到数据库中以减少互联网费用

  17. 17

    将JSON数据存储到android中的本地数据库

  18. 18

    将JSON数据存储到android中的本地数据库

  19. 19

    将 json 数据存储到数据库中的最佳实践

  20. 20

    如何将图像存储到文件系统(在Internet上)并存储到数据库的路径?

  21. 21

    nodejs:从文件读取并存储到数据库,限制最大并发数据库操作

  22. 22

    nodejs:从文件读取并存储到数据库,限制最大并发数据库操作

  23. 23

    如何将字符串转换为可以存储在数据库中的日期?

  24. 24

    如何将 jQuery 范围滑块值转换为表单以存储在 Django 的数据库中

  25. 25

    如何上传图片并存储在数据库中

  26. 26

    禁用按钮并存储在数据库中

  27. 27

    解析嵌套的 Json 对象并存储在 Android 中的数据库中

  28. 28

    将图像上传到服务器并存储在MySQL数据库中

  29. 29

    将 json 内容从 API 存储到 mysql 数据库

热门标签

归档