mysql - 如何将 Scala StaticQuery SELECT 查询的结果直接发送到 JSON 对象

标签 mysql json scala playframework slick

在 Scala 中,如何最直接地将 MySql 查询的结果发送到 JSON 字符串?我们在“play”框架内工作并使用“slick”连接到 MySQL,所以我更具体地尝试 slick's StaticQuery 的结果SELECT 直接到play JsValue目的。然而,任何解决一般问题的方法都是受欢迎的。

query string的select参数是动态插入的,有已知的MySQL类型,但编译时一般不知 Prop 体的参数和个数。

我觉得有一种聪明的方法可以用案例类和 Map 对象来实现这一点,但我希望有人已经更简单地解决了这个问题。例如有这个相关的 Java Gist .

例如我目前有:

import play.api.libs.json._
import scala.slick.jdbc.{GetResult, StaticQuery => Q}

...

case class SrResult(id: Int, user_id: Int, title: String)
implicit val getSrResult = GetResult(r => SrResult(r.<<, r.<<, r.<<))

val qSql = "SELECT id,user_id,title from MYTABLE LIMIT 10"
val q = Q.queryNA[SrResult](qSql)

我将动态地将“is,user_id,title”插入到 qSql 字符串中,因此 Q.queryNA 的返回类型“SrResult”在编译时是未知的。

为了完整起见,这里有一个我正在使用的示例表:

CREATE TABLE `MYTABLE` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `USER_ID` int(11) NOT NULL,
  `TITLE` varchar(254) NOT NULL,
  `DESCRIPTION` text
  `ARCHIVED` tinyint(1) NOT NULL,
  `CREATED_AT` bigint(20) NOT NULL,
  `END_DATE` date NULL,
  PRIMARY KEY (`ID`),
  KEY `TEST_USER_INDEX` (`USER_ID`),
  CONSTRAINT `TEST_USER_FK` FOREIGN KEY (`USER_ID`) REFERENCES `USERS` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1058 DEFAULT CHARSET=utf8;

最佳答案

我在this Stackoverflow answer中解释如何从 Slick 纯 SQL 查询中获取 map 。您将需要对其进行调整以将其限制为仅您需要的字段。从 map 中,使用您最喜欢的 JSON 库获取 JSON 对象应该是微不足道的。

关于mysql - 如何将 Scala StaticQuery SELECT 查询的结果直接发送到 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23185334/

相关文章:

Mysql - 为什么不考虑在哪里?

php - 数据库输出阻止图像

c - C 中的 JSON 响应格式

javascript - localStorage JSON解析后Jquery追加列表

java - 以下错误中发现的和必需的之间有什么区别

mysql - 计算子查询中匹配的数量以对查询进行排序

php - 如何从数据库中获取结果并在表格中显示排序

c++ - 使用 jsoncpp 解析 JSON 字符串

Scala 自定义不适用泛型

将参数化方法强制转换为函数时,Scala 有奇怪的类型吗?