Scala / MySQL列不能为空

时间:2016-04-18 10:54:48

标签: mysql scala playframework

我正在使用MySQL数据库和Play Framework对scala进行应用程序,我需要将值插入表“entite”,在此表中我需要检查来自其他表“intervalle_date”的ID并插入到我的表中“entite”如果该ID存在,如果它不存在,我需要在我的表“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)

在我检查var是否为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)
  }

最后,我在entite上进行插入:

  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?

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

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

之外使用null变量

您只需将var内的if关键字移至更新现有变量,而不是创建新变量:

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)
}