mysql - Scala/MySQL 列不能为空

标签 mysql scala playframework

我正在使用 MySQL 数据库和 Play Framework 在 scala 上做一个应用程序,我需要将值插入到表“entite”中,在这个表中我需要检查其他表“intervalle_date”中的 ID 并插入到我的表中如果该 ID 存在,则为“entite”,如果不存在,我需要在表“intervalle_date”中创建它,然后插入“entite”。

所以我做了第一个请求来检查是否存在:

      var intervalle_date_id = SQL(
      """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
        'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt)

检查该变量是否为 NULL 后,如果为 null,则创建它:

  if(intervalle_date_id == null)
  {
    SQL(""" insert into intervalle_date(date_text_debut, date_text_fin) values ({date_text_debut}, {date_text_fin})""").on(
      'date_text_debut -> value._9,
      'date_text_fin -> value._10).executeInsert(scalar[Long].single)
    var intervalle_date_id = SQL(
      """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
        'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt)
  }

最后我在实体上进行插入:

  SQL(""" insert into entite(entite_type, id_metier, id_service, regles, niveau_detail,
                            niveau_avancement, sources, licence_id, intervalle_date_id,
                            utilisateur_id) values({entite_type}, {id_metier}, {id_service}, {regles}, {niveau_detail},
                                                   {niveau_avancement}, {sources}, {licence_id}, {intervalle_date_id}, {utilisateur_id})
      """).on(
        'entite_type -> value._1,
        'id_metier -> value._2,
        'id_service -> value._3,
        'regles -> value._4,
        'niveau_detail -> value._5,
        'niveau_avancement -> value._6,
        'sources -> value._7,
        'licence_id -> value._8,
        'intervalle_date_id -> intervalle_date_id,
        'utilisateur_id -> value._11).executeInsert(scalar[String].single)

但是当我运行它时,我遇到了这个错误: [MySQLIntegrityConstraintViolationException:列“intervalle_date_id”不能为空]

我明白了,但我不知道为什么“intervalle_date_id”是NULL?

感谢您的帮助

最佳答案

这里的问题是您定义了 intervalle_date_id 两次:一次在 if 语句之外,该语句可以为 null;一次在 if 语句之外,该语句可以为 null;然后再次在 if 语句中。第二个 var 从未使用过 - 当到达该范围的末尾 (}) 时,它会立即被删除。然后,您的最后一个 insert 仍然在 if 之外使用 null 变量。

您所要做的就是删除 if 中的 var 关键字来更新现有变量,而不是创建新变量:

if(intervalle_date_id == null) {
   SQL(""" insert into intervalle_date(date_text_debut, date_text_fin) values ({date_text_debut}, {date_text_fin})""").on(
          'date_text_debut -> value._9,
          'date_text_fin -> value._10).executeInsert(scalar[Long].single)
   intervalle_date_id = SQL(
     """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
        'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt)
}

关于mysql - Scala/MySQL 列不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691973/

相关文章:

mysql - 为什么我可以使用 SELECT 读取 MySQL 表,但有时无法 INSERT 或 UPDATE?

scala - IntelliJ 反复忘记目标 src_managed 是源目录

MySQL 过滤步骤

php - Laravel Schema 设计多对多

Mysql Mac OS X 如何在本地机器上不需要密码

scala - 为什么以及如何在调用单参数函数时特别处理元组?

scala - 为什么这会使编译器崩溃?

scala - 已经配置了与 play.api.db.DBApi 的绑定(bind),play-slick 的演变和注入(inject)器错误

json - Play 框架 (Scala) - 获取包含数组的 json 子集

rest - Play 框架中 XML/Json 中的错误消息