【发布时间】:2014-02-18 10:25:03
【问题描述】:
我是 Play 框架和 Scala 语言的新手。我只想通过运行带有指定参数的 URL 来将一些数据保存到数据库中。 例如我想像这样运行 url:
/DeviceData?device_ID=1&insertDate=2013-01-01&windDirection=50&device_ID=1&insertDate=2013-01-02&windDirection=5
然后在数据库中插入两条新记录(使用 Device_ID、insertDate 和 windDirection)。 现在我试图一次只保存一条记录(我不知道如何读取元素列表并保存它们)但是它不起作用。没有错误,只是没有插入。
设备数据模型
case class DeviceData(data_ID: Long, device_ID: Long, insertDate: String, windDirection: Double)
object DeviceData{
var deviceDataList = new HashMap[Long, DeviceData]
var data_ID = 0L
def nextId(): Long = { data_ID += 1; data_ID}
def createDeviceData(device_ID: Long, insertDate: String, windDirection: Double) :Unit = {
DB.withConnection { implicit connection =>
SQL(
"""
INSERT INTO devicedata(device_ID, insertDate, windDirection)
VALUES ({device_ID}, {insertDate}, {windDirection})
"""
).
on("device_ID" -> device_ID, "insertDate" -> insertDate, "windDirection" -> windDirection).
executeInsert()
}
}
def list(): List[DeviceData] = { deviceDataList.values.toList }
}
DeviceDatas 控制器
object DeviceDatas extends Controller {
val deviceDataForm = Form(
tuple(
"device_ID" -> of[Long],
"insertDate" -> nonEmptyText,
"windDirection" -> of[Double]
)
)
def listDeviceData() = Action {
Ok(views.html.deviceData(DeviceData.list(), deviceDataForm))
}
def createDeviceData(device_ID: Long, insertDate: String, windDirection: Double) = Action { implicit request =>
deviceDataForm.bindFromRequest.fold(
errors => BadRequest(views.html.deviceData(DeviceData.list(), errors)),
{ case (device_ID, insertDate, windDirection) => {
DeviceData.createDeviceData(device_ID, insertDate, windDirection)
Redirect(routes.DeviceDatas.listDeviceData)
}
}
)
}
}
deviceData.scala.html - 很简单,就是检查是否有新插入的记录。
@(deviceDatas: List[DeviceData], deviceDataForm: Form[(Long, String, Double)])
@import helper._
@main("DeviceDatas"){
<h3>@deviceDatas.size DeviceData(s)</h3>
}
/deviceDatas 的路由文件
GET /deviceDatas controllers.DeviceDatas.listDeviceData
POST /deviceDatas controllers.DeviceDatas.createDeviceData(device_ID: Long, insertDate: String, windDirection: Double)
您能否帮助我了解如何将数据插入数据库,以及是否有可能放入包含少量记录的元素列表以插入。另外,将 DateTime (yyyy-MM-dd hh:mm:ss) 插入 Play Framework 中的 URL 参数的最佳方法是什么?我被卡住了,我不知道该怎么做。
更新
感谢 Zim-Zam O'Pootertoot 的回答。不幸的是我需要使用参数,因为我通过路由器发送数据。但无论如何,还要感谢你,因为我将来会使用 json。 我决定不使用我之前所说的参数列表,但是对于一条新记录,我正在发送一个请求(例如:要向数据库添加 6 条新记录,我需要在路由器上运行 6 次 URL:
/DeviceData?device_ID=1&insertDate=2013-01-01&windDirection=50
我的问题通过将路由文件更改为:
GET /deviceDatas controllers.DeviceDatas.listDeviceData
GET /deviceDatas controllers.DeviceDatas.createDeviceData(device_ID: Long, insertDate: String, windDirection: Double)
【问题讨论】:
-
您收到什么错误?
-
没有错误,只是什么也没发生,记录没有添加到数据库中
标签: mysql scala playframework-2.2