开发中难免会遇到一些让你想不到的问题和bug,今天我这遇到了一个最开始我认为太奇葩的问题了,怎么想都不知道是什么原因。
问题描述:系统上线后发现其中部分表单保存提示成功,但是数据库里居然没有数据,what,这是什么情况,上线前测试是没有问题啊,怎么就突然部分表单不可以了呢?
环境描述:系统测试一个库,正式一个库,同一个服务器
分析问题:1、开发环境
2、数据库
3、后台代码
问题排查:1、上面说了,开发环境是没有问题的
2、数据库时相同的数据库环境,查看了是否生产环境的库里的部分表单损坏(通过sql语句插入数据),发现没有问题,那么数据库也是没有问题了
那就剩下这最后一个代码上了,基本上就是在这三方面排查了
3、当然不出所料,问题就是在后台代码中。
问题所在:说问题前先说下数据库的一些知识。本人用的是Oracle数据库,sql数据库有这样一个特点:在oralce中,不同的用户,使用不同的schema. 但在sqlserver中,同一个用户可以有多个schema.
在后台开发中数据库方面用了hibernate,但是这里有个schema属性,就是这个属性导致了我之前bug出现
<hibernate-mapping>
<class name="com.techcomer.adm.po.AdmCard" table="ADM_CARD" schema="aaaa">
<id name="id" type="java.lang.Long">
<column name="ID" precision="10" scale="0" />
<generator class="assigned" />
</id>
<property name="deptCode" type="java.lang.String">
<column name="DEPT_CODE" length="20" not-null="true" />
</property>
<property name="applyDate" type="java.util.Date">
<column name="APPLY_DATE" length="7" not-null="true" />
</property>
在上述代码中,我在属性上加了schema,而aaaa就是代表了我的要访问数据库的用户,而我的生成环境用户不是aaaa,而是bbbb,这就是问题所在了。所以虽然数据库语句没问题,但是数据在正式库就是没有。把这个属性去掉就可以了,或者换成生产环境用户。
总结:遇见问题不可怕,一步一步思路清晰,肯定能找到问题并解决掉!!!!