您的位置:首页 > Web前端

Illegal group reference异常解决

2016-07-15 13:20 411 查看
异常场景:

Web项目与数据库有交互。

解决步骤:

开始的时候感觉是数据类型不匹配或是数据格式不规范的原因,因为在已经上线的项目中的某个实体内添加了日期字段(@Column(name = "CREATE_DATE" ,nullable=false,columnDefinition="datetime default '0000-00-00
00:00:00'")),看到列属性定义就可以看到错误在什么地方了,日期类型的字段,我为它赋了0000-00-00 00:00:00的默认值,呵呵。关键这不是头疼的事情,在测试的时候我为测试数据库中原先的相关数据手动添加了默认值,日期类型的。这样测试的时候绝对是没有问题的,因为测试数据库中没有columnDefinition="datetime default '0000-00-00
00:00:00'"这部分代码的用武之地,好了,测是没问题,上线吧。——Illegal group reference这个东西出来了。百思不得其解,测试正常,也很有自信感觉自己的代码没问题,到网上找各种资料,大多讲的异常Illegal group reference是由String
replaceAll(regex, replacement)函数造成的,搜索了整个项目,与新加字段相关的代码压根就没用到这个方法。还是坚持最初的怀疑——数据库中数据的问题。

这个时候想到生产环境和测试环境的差别就是测试的时候新增字段的默认值是我手动设置的,而生产数据库中新增字段的默认值是程序中定义的。这时大约的感觉到是columnDefinition="datetime default '0000-00-00 00:00:00'"这部分代码出问题了。写sql将默认值修改为DATE("2016-01-01
00:00:00")在运行程序,问题解决了。

总结:

这个场景中Illegal group reference异常出现的原因是数据库中的数据不符合Java或是JavaScript中数据的规范,比如运行sql语句UPDATE
activity_enrole_user SET CREATE_DATE = '0000-00-00 00:00:00';没有任何问题,但是在JavaScript中new Date("0000-00-00 00:00:00");会提示Invalid Date,new Date("2016-01-01 00:00:00")则正常显示Fri Jan 01 2016 00:00:00
GMT+0800 (中国标准时间)。

心得:

在与数据库交互的应用中,出现错误的原因可能是代码本身,也有可能是数据的问题,此时就需要多加思考和验证问题产生的来源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: