hisql 高级功能数据检测将错误数据拦截在系统外 一
2021-12-25 17:31
621 查看
hisql.net 官网(文档编写中) hisql github源码下载
git clone https://github.com/tansar/HiSql.git
在设计第二范式数据库时经常会把可能重复的数据单独做一种表关联,但是在写入表时为了数据的严谨需要校验一下值在另外一张表中存不存在 如 用一张用户表(
HTest01) 该表表结构如下
其中字段
UTYP的值在另外一张表
H_UType中做了维护表结构如下
为了演示使用我们向
H_UType中写入三条数据如下所示
//在表中添加用户类型 Modi方法的意思是 如果存在则更新没有则插入 sqlClient.Modi("H_UType", new List<object> { new { UTYP = "U1", UTypeName = "普通用户" }, new { UTYP = "U2", UTypeName = "中级用户" }, new { UTYP = "U3", UTypeName = "高级用户" } }).ExecCommand();
正常我们向表
HTest01写入数据时字段
UTYP的值必须要存在于表
H_UType中 不然这条数据就是一条不符合逻辑的数据,也可以认为这是条脏数据,在写代码时如果没有做一些校验就有可有把这种数据成功保存到数据库中
HiSql作者在日常开发过种也经常碰到这种问题,特别是在多业务场景多人团队开发时尤为明显有些开发考虑的全一点就做了校验有些就忽略了,带来系统的Bug的隐患 ,那有没有一种方式可以杜绝这种基本的逻辑错误呢?
Hisql提供了这个功能,使用过
HiSql的用户肯定知道 在初化始了
HiSql后会产生四张标准表如下所示
Hi_TabModel
Hi_FieldModel
Hi_Domain
Hi_DataElement
但这里不重点把每张表的作用一一介绍,我们需要实现本篇讲的数据检测只需要修改一下配置表
Hi_FieldModel代码如下
sqlClient.Update("Hi_FieldModel", new { TabName = "HTest01", FieldName = "UTYP", IsRefTab=true,RefTab= "H_UType",RefField="UTYP", RefFields = "UTYP,UTypeName",RefFieldDesc= "类型编码,类型名称",RefWhere="UTYP<>''" }).ExecCommand();
执行以上更新代码就是将表
HTest01的字段
UTYP配置了向该表插入数据时 字段
UTYP的值必须要是在表
H_UType中的字段
UTYP中,那么在向表
HTest01写入数据时
HiSql底层将会自动进行校验 可能大家会担心是不是每条数据都会查表校验会不会有性能问题,其实不用担心
HiSql对这些已经做了特殊处理基本上不用担心如果大家感兴趣可以查看一下
HiSql的源码
那么我们就试一试向表
HTest01插入数据测试一下看
sqlClient.Insert("HTest01", new { SID = "0", UTYP = "U4", UName = "hisql", Age = 36, Salary = 11, Descript = "hisql" }).ExecCommand();
执行以上代码会出现什么情况呢? 是的会抛出异常如下所示
这是
HiSql底层检测完后抛出的异常,以上代码插入的字段
UTYP值
U4不在刚才配置的表
H_UType中,所以这是一种不符合正常业务逻辑的非法数据
修改一下代码
sqlClient.Insert("HTest01", new { SID = "0", UTYP = "U3", UName = "hisql", Age = 36, Salary = 11, Descript = "hisql" }).ExecCommand();
这样就可以正常执行了可以通过
HiSql校验
相关文章推荐
- 关系型数据的分布式处理系统MyCAT(2)——高级功能和管理监控
- UNIX环境高级编程学习之第六章系统数据文件和信息-修改第四章实现的Shell的“ls -l”功能
- 检查已终止。收集事实数据时检测到错误。可能是tempdb 空间用尽或某个系统表不一致。请检查前面的错误消息
- Ajax 高级功能之ajax向服务器发送数据
- 【Struts2+Hibernate】数据校验功能+修改密码系统
- 干货:CMP系统中的高级功能CMDB
- 某数据机房管网管理系统功能及特点
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(2/19)
- Oracle常用系统数据字典表、系统包功能分类
- Android调用系统内部功能错误
- RxJava 驯服数据流之高级错误处理
- django管理功能POST提交数据总是出现错误,而实际是提交成功的
- DedeCMS系统安全检测功能使用说明
- jQuery LigerUI v1.19 “高级自选查询组件”查询比较数字时返回数据错误的解决办法
- 如何在应用系统中实现数据权限的控制功能(2)
- GCC4的高级功能--缓冲区溢出和栈溢出检测
- 自动功能检测系统FUNCTION
- 计算机网络数据链路层的错误检测与纠正之海明码的生成,解码
- 如何修复 ubuntu 中检测到系统程序错误的问题
- 常规功能和模块自定义系统 (cfcmms)—039模块记录(数据)的权限设计(4)