如何在 Anorm 中处理 null

2024-04-01

我有一个带有可为空列的表,当查询空列时,它抛出错误

 val row: List[(String,String)] = SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
                .as((str("part"))~ str("cat") map(flatten) *)

我检查了链接https://www.playframework.com/documentation/2.0/ScalaAnorm https://www.playframework.com/documentation/2.0/ScalaAnorm .

它只会使用类似的方法来处理可为空的列

SQL("Select name,indepYear from Country")().map { row =>
  row[String]("name") -> row[Option[Int]]("indepYear")
}

但是由于str("part")比更紧凑row[String]("name"),所以我想尝试使用str("part"),但是如何制作str("part")与可为空的列一起使用吗?


如果您正在读取可为空的列,则really应该将它绑定到Option[String]表示它可能缺少一个值。 Anorm 不会将其转换为null,相反它会抛出错误。

val row: List[(Option[String], String)] = 
    SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
       .as( get[Option[String]("part") ~ str("cat") map(flatten) *)

然而,这很混乱,如果您想为String。我们可以制作一个可重用的默认解析器NULL值到空字符串:

val parser: RowParser[(String, String)] = {
    get[Option[String]]("part") ~ get[Option[String]]("cat") map {
       case part~cat => (part.getOrElse(""), cat.getOrElse(""))
    }
}

然后应用它:

val row: List[(String, String)] = 
    SQL("select top 10 Spare_Part part,Pricing_Category cat from Price_Point_Base")
       .as(parser *)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Anorm 中处理 null 的相关文章

随机推荐

  • Html:无需控件即可播放音频?

    当用户单击图像时 我需要播放 mp3 音频文件 我只想播放音频 即不应该有控件 小部件等 浏览器也不应该启动外部应用程序 编辑 好的 我也许可以尝试一下 flash 有推荐的轻量级Flash播放器吗 现在有办法做到这一点 把这个
  • 更改Delphi中单元的初始化顺序

    我正在使用 Delphi XE7 开发 Windows 32 位应用程序 我的应用程序包含许多单元 其中有一个初始化部分 我需要首先初始化一个特定的初始化部分 可以设置优先级吗 我尝试在 dpr 文件中写入初始化部分 但编译器拒绝了这一点
  • Backbone - 从 API 获取 JSON 数据

    这几天我在玩Backbone 我想从 Twitter 搜索 API 接收一些数据 但我真的不明白它是如何工作的 这是我的代码 function Tweet Backbone Model extend Tweets Backbone Coll
  • 调用 .next() 方法时扫描仪出现 NoSuchElementException

    在 Java 中 我收到此异常 Exception in thread main java util NoSuchElementException at java util Scanner throwFor Unknown Source a
  • pthread_mutex_t VS @synchronized 块?

    static pthread mutex t gLock global pthread mutex init gLock NULL in init pthread mutex lock gLock for int i 0 i lt mess
  • FileNotFoundError 但文件存在

    我正在创建一个导入许多 JSON 文件的 Python 应用程序 这些文件与 python 脚本位置位于同一文件夹中 在我将整个文件夹移到其他地方之前 文件已完美导入 由于脚本会在不存在文件的情况下创建一个文件 因此它会继续在主目录中创建该
  • 在 Windows 上针对 Mac/Linux 进行编译

    显然 您无法真正在 Windows 上运行 Mac 或 Linux 应用程序 但是您可以使用 MSVC 为这些平台编译二进制文件吗 显然要插入额外的编译器和工具 对于一个严肃的构建系统 您不希望每个平台都有一个构建服务器 因此拥有一个为所有
  • 在表创建脚本中显式指定排序规则有哪些优点和缺点?

    创建表时 COLLATE 子句是可选的 所以 在 CREATE TABLE T1 F1 varchar 50 COLLATE SQL Latin1 General CP1 CS AS NOT NULL F2 varchar 50 NOT N
  • 定义 ADT 时案例对象 T 和案例类 T() 之间的区别?

    假设在 scala 中我有一个 ADT 如下所示 sealed trait Animal object Animal case class Lion name String extends Animal case class Elephan
  • Perl 中的 SHA256 摘要

    我需要对电子邮件地址进行 SHA256 哈希 并且需要将结果作为字符串 我尝试了以下方法 use Digest SHA qw sha256 my data swara email protected cdn cgi l email prot
  • 使用 Waterline ORM SailsJS 的日期之间

    目标 返回两个日期之间创建的项目的列表 根据这个问题https github com balderdashy waterline issues 110 https github com balderdashy waterline issue
  • 页面加载后自动显示 qTip(jQuery 插件)工具提示

    有没有人曾经使用 qTip 创建一个工具提示来响应元素上的点击 但也设置为在页面加载后弹出 我尝试使用 setTimeout 但似乎无法让它自动加载 Thanks 您可以将 qtip 定义为在您喜欢的任何事件中显示 只需将其配置为不在事件中
  • 如何从文本框中删除重复项?

    我有一个文本框 其中每个项目都占新行 我正在尝试从此文本框中删除重复项 我想不出什么 我尝试将每个项目添加到数组中并删除重复项 但它不起作用 还有其他选择吗 yourTextBox Text string Join Environment
  • 单击时清除角度材质自动完成

    您好 我想在单击时重置角度材料自动完成的值 但我不知道怎么办 我的代码
  • 如何使用用户名和密码获取github令牌

    我正在使用 rhodes 开发移动应用程序 我想访问 github 的私人仓库 我只有用户名和密码 如何获取给定用户名和密码的令牌 一旦您只有登录名和密码 您就可以使用基本身份验证来使用它们 首先 检查此代码是否显示所需存储库的 json
  • 如何使用通配符 TABLE_DATE_RANGE() 删除大查询中的多个表?

    我正在查看文档 但没有找到使用通配符删除多个表的方法 我试图做这样的事情 但它不起作用 DROP TABLE TABLE DATE RANGE clients sessions TIMESTAMP 2017 01 01 TIMESTAMP
  • 将 grunt 附加到 VSCODE 调试器

    我正在尝试将默认的 grunt 任务附加到 vscode 调试器 所以我想要的工作流程是启动调试器并运行默认的 grunt 任务 然后我可以使用 vscode 调试器在代码中放置断点 我的启动 JSON 文件如下所示 version 0 2
  • 任何人都可以帮助使用基于函数的 id 实现 Nuxt.js Google 跟踪代码管理器

    我安装了这段代码并将其添加到我的 nuxt config js 中 它工作得很好 链接到package https github com nuxt community modules tree master packages google
  • 如何在 JasperReports/iReport 中使用同一数据源两次

    我正在尝试找出如何最好地使用图表和代表相同数据集的表格来制作报告 我需要克服摘要的定位在底部 因此打算使用子报表和表子报表 我正在尝试在一个详细区域中使用两个表格和一个图表 如果我设置datasourceexpression for to
  • 如何在 Anorm 中处理 null

    我有一个带有可为空列的表 当查询空列时 它抛出错误 val row List String String SQL select top 10 Spare Part part Pricing Category cat from Price P