在 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/