# 数据库操作

本文作者:youhong.ai (opens new window)

公司: 泛微 (opens new window)

部门: 上海大区EBU7部开发1部

职位: 开发工程师

对系统做二开基本上都是需要与数据库进行交互的,所以要对系统开发,就一定要知道如何在ecology中使用代码操作数据库数据(CRUD),这一章就是对数据库操作做一个简单的说明和讲解

# 数据库表结构

ecology有很多表,这里对几个常用的表进行一定的讲解

# 用户表

用户表 hrmresource

用户是oa系统中最重要的一个元素,在系统中存储用户的表为hrmresource表,表信息如下

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 haschangepwd 密码是否已经改过 varchar2 80 密码是否已经改过
2 created 创建时间 timestamp(6) 11 创建时间
3 creater 创建人id integer 创建人id
4 modified 修改时间 timestamp(6) 11 修改时间
5 modifier 修改人id integer 修改人id
6 passwordlocktime 密码锁定时间 date 7 密码锁定时间
7 salt 加盐 varchar2 800 加盐
8 mobilecaflag 未知字段 varchar2 80 未知字段
9 companystartdate 公司开始日期 char 10 公司开始日期
10 companyworkyear 公司年限 number (4,2) 公司年限
11 workstartdate 工作开始日期 char 10 工作开始日期
12 workyear 工作年限 number (4,2) 工作年限
13 secondarypwd 第二密码 varchar2 100 第二密码
14 usesecondarypwd 使用第二密码 integer 使用第二密码
15 usekind 用工性质 integer 用工性质
16 jobcall 职称 integer 职称
17 accumfundaccount 公积金帐号 varchar2 240 公积金帐号
18 birthplace 出生地 varchar2 480 出生地
19 folk 民族 varchar2 240 民族
20 residentphone 居住地电话 varchar2 480 居住地电话
21 residentpostcode 居住地邮编 varchar2 480 居住地邮编
22 extphone 分机 varchar2 400 分机
23 managerstr 所有上级 varchar2 1000 所有上级
24 status 状态 integer 0:试用
1:正式
2:临时
3:试用延期
4:解聘
5:离职
6:退休
7:无效
25 fax 传真 varchar2 480 传真
26 islabouunion 是否为工会会员 char 1 是否为工会会员
27 weight 体重 integer 体重
28 tempresidentnumber 暂住证号码 varchar2 480 暂住证号码
29 probationenddate 试用期结束日期 char 10 试用期结束日期
30 countryid 国家id integer 1 国家id
31 passwdchgdate 密码改变日期 char 10 密码改变日期
32 needusb 是否需要usb integer 是否需要usb
33 serial usb相关 varchar2 256 usb相关
34 account AD域账号 varchar2 60 AD域账号
35 lloginid 上次系统账号 varchar2 480 上次系统账号
36 needdynapass 是否使用动态密码 integer 是否使用动态密码
37 dsporder 显示顺序 float 22 显示顺序
38 passwordstate 动态密码状态 integer 0:启用,1:停止(默认),2:网段策略
39 accounttype 帐号类型 integer 0或者为空:主账号,1:次账号
40 belongto 所属主帐号 integer hrmreource表id
41 dactylogram 主指纹 varchar2 4000 主指纹
42 assistantdactylogram 次指纹 varchar2 4000 次指纹
43 passwordlock 密码锁定标记 integer 密码锁定标记
44 sumpasswordwrong 连续错误次数 integer 连续错误次数
45 oldpassword1 旧密码1 varchar2 800 旧密码1
46 oldpassword2 旧密码2 varchar2 800 旧密码2
47 msgstyle 未知字段 varchar2 160 未知字段
48 messagerurl 人员头像存储地址 varchar2 800 人员头像存储地址
49 pinyinlastname 人员姓名拼音首字母 varchar2 50 人员姓名拼音首字母
50 tokenkey 动态令牌序列号 varchar2 800 动态令牌序列号
51 userusbtype usb类型 varchar2 80 1-微步key
2-海泰key
3-动态令牌
4-动态密码
52 outkey 外键与集成相关 varchar2 800 外键与集成相关
53 adsjgs ad同步上级公司 varchar2 1000 ad同步上级公司
54 adgs ad同步公司 varchar2 1000 ad同步公司
55 adbm ad同步部门 varchar2 1000 ad同步部门
56 mobileshowtype 移动电话显示类型 integer 移动电话显示类型
57 usbstate usb启用策略 integer 0-启用
1-禁用
2-网段策略
58 totalspace 未知字段 float 22 100 未知字段
59 occupyspace 未知字段 float 22 0 未知字段
60 ecology_pinyin_search 人员浏览按钮模糊搜索拼音首字母 varchar2 1000 人员浏览按钮模糊搜索拼音首字母
61 isadaccount 是否是ad账号 char 1 是否是ad账号
62 accountname 工资账号户名 varchar2 1000 工资账号户名
63 id ID integer ID
64 loginid 系统登陆帐号 varchar2 60 系统登陆帐号
65 password 系统登陆密码 varchar2 800 系统登陆密码
66 lastname varchar2 60
67 sex 性别 char 1 性别
68 birthday 生日 char 10 生日
69 nationality 国籍 integer 国籍
70 systemlanguage 系统语言 integer 系统语言
71 maritalstatus 婚姻状况 char 1 婚姻状况
72 telephone 电话 varchar2 480 电话
73 mobile 手机 varchar2 480 手机
74 mobilecall 其他电话 varchar2 480 其他电话
75 email 电子邮件 varchar2 480 电子邮件
76 locationid 工作地点 integer 工作地点
77 workroom 办公室 varchar2 480 办公室
78 homeaddress 家庭住址 varchar2 800 家庭住址
79 resourcetype 用户类别 char 1 用户类别
80 startdate 合同开始日期 char 10 合同开始日期
81 enddate 合同结束日期 char 10 合同结束日期
82 jobtitle 岗位 integer 岗位
83 jobactivitydesc 职责描述 varchar2 1000 职责描述
84 joblevel 工作级别 integer 工作级别
85 seclevel 安全级别 integer 安全级别
86 departmentid 所属部门 integer 所属部门
87 subcompanyid1 所属分部1 integer 所属分部1
88 costcenterid 所属成本中心 integer 所属成本中心
89 managerid 经理 integer 直接上级
90 assistantid 助理 integer 助理
91 bankid1 工资银行1 integer 工资银行1
92 accountid1 工资帐号1 varchar2 800 工资帐号1
93 resourceimageid 照片id integer 人员的照片存放附件id,和文档附件imagefileid表关联
94 createrid 创建人id integer 创建人id
95 createdate 创建日期 char 10 创建日期
96 lastmodid 最后修改人id integer 最后修改人id
97 lastmoddate 最后修改日期 char 10 最后修改日期
98 lastlogindate 最后登陆日期 char 10 最后登陆日期
99 datefield1 自定义日期1 varchar2 80 自定义日期1
100 datefield2 自定义日期2 varchar2 80 自定义日期2
101 datefield3 自定义日期3 varchar2 80 自定义日期3
102 datefield4 自定义日期4 varchar2 80 自定义日期4
103 datefield5 自定义日期5 varchar2 80 自定义日期5
104 numberfield1 自定义数字1 float 22 自定义数字1
105 numberfield2 自定义数字2 float 22 自定义数字2
106 numberfield3 自定义数字3 float 22 自定义数字3
107 numberfield4 自定义数字4 float 22 自定义数字4
108 numberfield5 自定义数字5 float 22 自定义数字5
109 textfield1 自定义文本1 varchar2 800 自定义文本1
110 textfield2 自定义文本2 varchar2 800 自定义文本2
111 textfield3 自定义文本3 varchar2 800 自定义文本3
112 textfield4 自定义文本4 varchar2 800 自定义文本4
113 textfield5 自定义文本5 varchar2 800 自定义文本5
114 tinyintfield1 自定义判断1 integer 自定义判断1
115 tinyintfield2 自定义判断2 integer 自定义判断2
116 tinyintfield3 自定义判断3 integer 自定义判断3
117 tinyintfield4 自定义判断4 integer 自定义判断4
118 tinyintfield5 自定义判断5 integer 自定义判断5
119 certificatenum 身份证号码 varchar2 480 身份证号码
120 nativeplace 籍贯 varchar2 800 籍贯
121 educationlevel 学历 integer 学历
122 bememberdate 入团时间 char 10 入团时间
123 bepartydate 入党时间 char 10 入党时间
124 workcode 编号 varchar2 480 编号
125 regresidentplace 户口 varchar2 1000 户口
126 healthinfo 健康状况 char 1 健康状况
127 residentplace 居住地 varchar2 1000 居住地
128 policy 政治面貌 varchar2 240 政治面貌
129 degree 学位 varchar2 240 学位
130 height 身高 varchar2 80 身高

# 流程基本信息表

流程类型表 (工作流基本信息表) workflow_base

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 isshowsrc 显示意见来源 varchar2 8
2 sendtomessagetype 消息类型 char 1
3 islockworkflow 流程锁定 char 1
4 limitvalue 限制附件上传格式 varchar2 2000
5 locknodes 流程编辑锁定 varchar2 2000
6 tracefieldid 痕迹正文字段 integer
7 tracesavesecid 痕迹正文保存目录 integer
8 tracecategorytype 痕迹正文保存目录类型 char 1
9 tracecategoryfieldid 痕迹正文保存目录字段ID integer
10 tracedocownertype 痕迹正文所有者类型 integer
11 tracedocownerfieldid 痕迹正文所有者字段 integer
12 tracedocowner 痕迹正文所有者 integer
13 titletemplate 标题模版 clob 4000
14 freewftype 自由流程的模式 char 1 1:简易模式,2:高级模式
15 titleset 自定义模式 char 1 0或空为默认模式
16 isautoremark 自动填写户最后一次手动操作的意见 char 1
17 importreadonlyfield 允许导入数据到只读字段 char 1 1:是 其他:否
18 enablesignature test char 1
19 issmsremind 是否开启短信提醒 char 1
20 iswechatremind 是否开启微信提醒 char 1
21 isemailremind 是否开启邮件提醒 char 1
22 isdefaultsmsremind 短信默认提醒 char 1
23 isdefaultwechatremind 微信默认提醒 char 1
24 isdefaultemailremind 邮件默认提醒 char 1
25 isarchivenoremind 归档节点不需提醒 char 1
26 isccnoremind 抄送人不需提醒 char 1
27 ischosereminder 由操作者选择提醒接收人 char 1
28 alterremindnodestype 允许修改提醒的节点类型 char 1 0:全部,1:选择
29 alterremindnodes 选择提醒的节点id,用“,”间隔 varchar2 1000
30 submittype 批量提交启用节点 integer 0:全部,1:选择 2:排除
31 hrmconditionshowtype 人力资源条件显示设置 char 1
32 defaultnameruletype 标题设置规则 char 1 0
33 isreaffirm test char 1 0
34 isonlyoneautoapprove 仅当后续节点操作者为本人一人时自动处理 char 1
35 isopencommunication 是否启用相关交流 integer
36 isselectrejectnode 退回时是否可选择退回节点 char 1
37 forbidattdownload 禁止附件批量下载 integer 0
38 isimportdetail 是否导入明细 char 1
39 specialapproval 是否特批件 char 1 1:是,0或其他:否
40 frequency 次数 integer
41 cycle 周期 char 1
42 nosynfields 不需同步字段 varchar2 2000
43 isneeddelacc 设置是否流程删除时相关的附件 varchar2 8
44 sapsource sap数据源 varchar2 160
45 isfnacontrol 是否需要预算控制 char 1
46 fnanodeid 预算节点id varchar2 4000
47 fnadepartmentid 预算部门id varchar2 4000
48 smsalertstype 设置短信提醒方式 char 1
49 forwardreceivedef 转发接收定义 char 1
50 issavecheckform 流程保存是否验证必填 char 1 0:否 1:是
51 archivenomsgalert 归档节点不需短信提醒 char 1 0:否 1:是 流程提醒改造前使用字段,
52 archivenomailalert 归档节点不需邮件提醒 char 1 0:否 1:是 流程提醒改造前使用字段,
53 isfnabudgetwf 是否是费控流程 char 1
54 chatstype 是否微信提醒 integer 流程提醒改造前使用字段,
55 chatsalerttype 微信提醒类型 integer 流程提醒改造前使用字段,
56 notremindifarchived 归档节点不需微信提醒 integer 流程提醒改造前使用字段,
57 isworkflowdoc 是否是公文流程 integer
58 version 版本号 integer
59 activeversionid 当前流程所属活动版本id integer
60 versiondescription 版本介绍 varchar2 1000
61 versioncreater 版本创建人 integer
dsporder 显示顺序 integer
63 fieldnotimport 无需导入字段 varchar2 4000
64 isfree 是否是自由流程 char 1 0
65 ecology_pinyin_search 流程名称拼音缩写-用于快速搜索 varchar2 1000
66 officaltype 公文类型 integer
67 custompage4emoble 手机版用自定义页面 varchar2 2000
68 isupdatetitle 是否修改过流程标题字段 integer 1 0或者空:未修改过流程标题字段 1:修改了流程标题字段
69 isshared 是否允许共享 char 1
70 isoverrb 归档收回 char 1
71 isoveriv 归档干预 char 1
72 showcharturl 显示流程图 varchar2 4000
73 isautoapprove 自动批准 char 1
74 isautocommit 自动提交 char 1
75 id ID integer
76 workflowname 工作流名称 varchar2 1000
77 workflowdesc 工作流描述 varchar2 1000
78 workflowtype 所属工作流种类 integer
79 securelevel 安全级别 varchar2 24
80 formid 表单或单据id integer
81 userid 创建人id integer
82 isbill 单据还是表单 char 1 0:表单1:单据
83 iscust 是否为门户工作流 integer 0:否 1:是
84 helpdocid 工作流帮助文档id integer
85 isvalid 是否有效 char 1 0:否 1:是
86 needmark 是否需要编号 char 1 0:否 1:是
87 messagetype 否短信提醒 integer 0:否 1:是
88 multisubmit 是否批量提交 integer 0:否 1:是
89 defaultname 是否默认说明 integer 0:否 1:是
90 docpath 附件上传目录名称 varchar2 2000
91 subcompanyid 分部id integer
92 mailmessagetype 是否邮件提醒 integer 0:否 1:是
93 docrightbyoperator 是否跟随文档关联 integer 0:否 1:是
94 doccategory 附件上传目录id varchar2 1000
95 istemplate 是否为流程模板 char 1 0:否 1:是
96 templateid 流程引用模板id integer
97 catelogtype 附件上传目录类型 integer 0:固定目录 1:选择目录
98 selectedcatelog 所选择目录的对应的id integer
99 docrightbyhrmresource 是否按人力资源字段附权 integer 默认为不启用
100 needaffirmance 是否需要提交确认 char 1 0:否 1:是
101 isremarks 是否允许已办及办结事宜转发 char 1
102 isannexupload 是否允许签字意见上传附件 char 1
103 annexdoccategory 流程签字意见附件文档目录 varchar2 1000
104 isshowonreportinput 是否数据中心输入表 char 1 0 0:否 1:是
105 titlefieldid 标题字段id integer
106 keywordfieldid 主题词字段id integer
107 isshowchart 提交流程后是否显示流程图 char 1 0:否 1:是
108 orderbytype 流程审批意见显示顺序 char 1 1:倒序;2:正序
109 istridiffworkflow 是否触发不同流程 char 1 0:否 1:是
110 ismodifylog 是否记录表单修改日志 char 1 0 0:否 1:是
111 ifversion 是否保留正文版本 char 1 0:否 1:是
112 wfdocpath 流程保存为文档的路径 varchar2 800
113 wfdocowner 流程保存?槲?n的所有者 varchar2 800
114 isedit 是否正在图形化编辑 char 1
115 editor 当前编辑人 integer
116 editdate 编辑日期 char 10
117 edittime 编辑时间 char 8
118 showdelbuttonbyreject 退回创建节点是否可删除 char 1 0:否 1:是
119 showuploadtab 是否显示上传附件tab char 1 0:否 1:是
120 issigndoc 是否允许签字意见关联文档 char 1 0:否 1:是
121 showdoctab 是否显示相关文档tab char 1 0:否 1:是
122 issignworkflow 是否允许签字意见关联流程 char 1 0:否 1:是
123 showworkflowtab 是否显示相关流程tab char 1 0:否 1:是
124 candelacc 是否允许删除附件 char 1 0:否 1:是
125 isforwardrights 是否允许转发人设置被转发人权限 char 1 0:否 1:是
126 isimportwf 新建时是否可导入流程 char 1 0:否 1:是
127 isrejectremind 退回是否提醒的 char 1 0:否 1:是
128 ischangrejectnode 退回人是否可设置提醒节点 char 1 0:否 1:是
129 wfdocownertype 流程存为文档的文档所有者取值类型 integer 1、指定人 2、取流程表单字段的值
130 wfdocownerfieldid 流程存为文档的文档所有者 integer 如果取值与流程表单字段的值,指定字段id
131 newdocpath 流程中多文档字段 varchar2 1000 直接新建文档是可根据该属性指定的目录,直接到文档创建目录(格式主目录id/分目录id/子目录id)
132 keepsign 保持签字意见 integer
133 seccategoryid 子目录id integer
134 custompage 自定义页面 varchar2 2000
135 issignview 是否允许查看先关流程签字意见 integer
136 cus_titletemplate 列表显示标题-自定义格式 clob
137 reqLevelColorJson 紧急程度-颜色代码信息 varchar2 2000
138 docfiles 流程存为文档,需要的附件 varchar2 10 1、在线html 2、离线html 3、pdf

# 流程请求表

流程请求表

workflow_requestbase

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 totalgroups 总共需要的操作者组数 integer
2 requestname 请求名称 varchar2 1000
3 creater 创建人 integer
4 createdate 创建日期 char 10
5 createtime 创建时间 char 8
6 lastoperator 最后操作者id integer
7 lastoperatedate 最后操作日期 char 10
8 lastoperatetime 最后操作时间 char 8
9 deleted 是否删除 integer 0 0:是
10 creatertype 创建人类型 integer 0 1:人力资源,2:客户
11 lastoperatortype 最后操作者类型 integer 0 1:人力资源,2:客户
12 nodepasstime 节点超时时间 float 22 -1 小时
13 nodelefttime 节点处理剩余时间 float 22 -1 小时
14 docids 相关文档 varchar2 4000
15 crmids 相关客户 varchar2 4000
16 hrmids_temp temp varchar2 4000
17 prjids 相关项目 varchar2 4000
18 cptids 相关资产 varchar2 4000
19 requestlevel 请求级别 integer 0 0:正常
1:重要
2:紧急
20 requestmark 请求说明 varchar2 800
21 messagetype 消息提醒 integer
22 mainrequestid 主流程的请求id integer
23 currentstatus 保存流程暂停、撤销时流程状态 integer 0为暂停,1为撤销
24 laststatus 用于保存流程暂停、撤销时,流程status的值 varchar2 480
25 ismultiprint 是否已批量打印 integer 0 1:已经批量打印,0或其他:未批量打印
26 chatstype 微信提醒 integer
27 ecology_pinyin_search ecology_拼音_搜索 varchar2 1000
28 hrmids 相关人力资源 clob 4000
29 requestnamenew 带标题字段的请求标题 varchar2 4000
30 formsignaturemd5 表单数据串加密字段 varchar2 1000
31 dataaggregated 子流程是否归档汇总状态 char 1
32 requestid 请求id integer
33 workflowid 工作流id integer
34 lastnodeid 最后操作节点id integer
35 lastnodetype 最后操作节点类型 char 1
36 currentnodeid 当前节点id integer
37 currentnodetype 当前节点类型 char 1 0:创建,1:批准,2:提交,3:归档
38 status 请求状态 varchar2 500
39 passedgroups 已经通过的操作者组数 integer
40 seclevel 流程密级 varchar2 1 对应人力资源ResourceClassification表中的secLevel
41 remindTypes 流程提醒方式 varchar2 40 0:短信提醒;2:邮件提醒,

# 流程表单表

流程表单表

workflow_bill

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 clazz 系统单据继承类 varchar2 800
2 id ID integer
3 namelabel 单据显示名称 integer
4 tablename 对应的主表名称 varchar2 480
5 createpage 创建请求页面url varchar2 1000
6 managepage 管理请求页面url varchar2 1000
7 viewpage 查看请求页面url varchar2 1000
8 detailtablename 对应的从表名称 varchar2 480
9 detailkeyfield 从表链接主表的关键字 varchar2 480
10 operationpage 后台处理请求页面url varchar2 1000
11 hasfileup 已有文件上传 char 1
12 invalid 无效标志 integer
13 formdes 表单描述 varchar2 1000
14 subcompanyid 子公司id integer
15 dsporder 显示顺序 float 22
16 subcompanyid3 子公司id3 integer
17 from_module_ 表单模块 varchar2 80

# 工作流请求节点操作人信息表

工作流请求节点操作人信息表

workflow_currentoperator

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 isprocessing 流程异步处理状态 char 1
2 processuser 实际操作人 integer
3 autodate varchar2 1000
4 autodatetime varchar2 1000
5 isbereject 是否退回 char 1
6 isreject 是否为退回前的节点操作人 char 1 用于分叉流转日志显示(1:是,0或其它:否)
7 needwfback 需反馈 char 1
8 lastisremark 用于保存流程暂停、撤销时,流程操作者isremark的值 char 1
9 isreminded_csh 是否超时后提醒 char 1
10 wfreminduser_csh 流程超时后提醒用户 varchar2 4000
11 wfusertypes_csh 超时后的流程用户类型 varchar2 4000
12 handleforwardid 用于保存流程转办记录id integer
13 takisremark 用于记录意见征询标识 integer 2:是意见征询接收人
-2:是未回复前意见征询人状态
0:是回复后意见征询人状态
14 lastreminddatetime 用于记录上一次超时提醒的时间 varchar2 4000 格式:
id_yyyy-mm-dd hh24:mi:ss
多个之间用半角逗号隔开
id为workflow_nodelinkovertime表id
15 requestid 请求id integer
16 userid 用户id integer
17 groupid 赋予每个操作人的标示,但是非会签会都一样是同一个值 integer
18 workflowid 工作流id integer
19 workflowtype 工作流类型 integer
20 isremark 操作类型 char 1 0:未操作
1:转发
2:已操作
4:归档
5:超时
8:抄送(不需提交)
9:抄送(需提交)
a: 意见征询
b: 回复
h: 转办
j: 转办提交
11:传阅
21 usertype 用户类型 integer 1、人力资源
2、客户
22 nodeid 操作节点id integer
23 agentorbyagentid 代理记录 integer 当前记录为被代理人记录时,显示代理人的id;
当前记录为代理人记录时,显示被代理人的id;
没有代理为-1
24 agenttype 代理操作 char 1 0:没有代理
1:当前记录是被代理人记录(isremak=2或=4);
2:当前记录是代理人记录(isremak值取决于代理人是否已经操作)
25 showorder 操作人的显示顺序 integer 从0开始
26 receivedate 接收到的日期 char 10
27 receivetime 接收到的时间 char 8
28 viewtype 查看标志 integer 0:接收到流程且未查看过,显示红色new标记;
-1:查看过流程后又有新的未查看回复,显示黄色new标记;
-2:已查看过流程,不显示任何new标记;
29 iscomplete 标记流程是否归档 integer 0:未归档,1:归档
30 islasttimes 操作人最后一次操作记录 integer 0:操作人在流程中多次出现,且本条记录不是操作人最后一次操作所用的纪录;
1:操作人在流程中出现一次;或操作人在流程中多次出现,且本条记录是操作人最后一次操作所用的纪录;
31 id 自增长id字段 integer
32 operatedate 操作日期 char 10 未查看时为空;
查看后记录第一次查看时间;
操作后记录操作时间;
33 operatetime 操作时间 char 8 未查看时为空;
查看后记录第一次查看时间;
操作后记录操作时间;
34 groupdetailid 节点操作组里的操作人条件id integer
35 isreminded 是否已经超时提醒过 char 1 1、已经超时提醒
36 isprocessed 是否已经超时处理过 char 1 1、自动流转
2:流转到指定对象
3:超时并未启用超时处理或自动流转失败
37 wfreminduser 工作流超时提醒人 varchar2 1000
38 wfusertypes 工作流超时提醒人类型 varchar2 800
39 preisremark 改变前的isremark char 1
40 overtime 超时处理时间点 varchar2
41 overworktime 接收时间到超时处理时间点相隔多少工作时间 varchar2
42 takId 意见征询的记录id integer
43 multiTakLevel 意见征询层级 integer 0:一级征询, 1:二级征询,依次叠加
44 isTakOut 当前记录是否征询出去 char 1 1:当前记录已征询出去 0:未征询出去
45 isInMultiTak 是否处于多级征询状态 char 1 1:当前记录处于多级征询状态 0:未处于多级征询状态

# 工作流单据字段表

工作流单据字段表

workflow_billfield

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 fieldshowtypes 显示类型 integer
2 id ID integer
3 billid 单据id integer
4 fieldname 数据库表字段名称 varchar2 480
5 fieldlabel 字段显示名称 integer
6 fielddbtype 单据字段数据库类型 varchar2 320
7 fieldhtmltype 单据字段页面类型 char 1 1:单行文本框
2:多行文本框
3:浏览按钮
4:check框
5:选择框
8 viewtype 主表字段还是从表字段 integer 0 0:主表
1:从表
9 detailtable 明细表 varchar2 400
10 fromuser 用户表单 char 1 1
11 textheight 文本高度 integer
12 dsporder 显示顺序 number (15,2)
13 childfieldid 子字段id integer
14 imgheight 图片高度 integer (0)
15 imgwidth 图片宽度 integer (0)
16 places 位置 integer
17 qfws 小数位数 varchar2 400
18 textheight_2 文本高度_2 varchar2 400
19 selectitem 选择条目 integer
20 linkfield 连接字段 integer
21 selectitemtype 公共选择框 char 1
22 pubchoiceid 公共选择框ID integer
23 pubchilchoiceid 公共选择框子项ID integer
24 statelev 选择框级数 integer
25 locatetype 定位类型 char 1 2:自动、1:手动

# 流程单据明细表

流程单据明细表

workflow_billdetailtable

序号 数据库列名 中文名称 数据类型 长度 是否允许空值 是否为外键 是否自增长 默认值 说明
1 id ID integer
2 billid 单号id integer
3 tablename 表名 varchar2 400
4 title 标题 varchar2 1000
5 orderid 排序id integer 0

其他表类型这里就不一一展示了

# java代码操作数据库

java代码中操作数据库,有公司封装好的类,当然也可以使用mybatis等orm框架,但是使用公司封装好的类更加契合ecology系统,其中有一些加密解密以及一些多语言的解析信息,所以这里推荐使用公司封装的类,本文档也只对公司封装的类进行讲解

# 基础介绍

操作数据的类

weaver.conn.RecordSet
1

RecordSet内部封装了jdbc,其中操作数据库方式与jdbc十分类似

weaver.conn.RecordSetTrans
1

带有事务的类

RecordSetTransRecordSet一致,但是内部做了对事务的处理,并不会自动提交操作,而是需要手动提交事务

# 查询

# 基础查询

在进行二开时,使用最多的sql操作应该就是查询了,下面使用代码来看下如何在代码中查询数据库数据

我们需要查询人力资源表中的数据,并且展示用户的id和他的用户名,我们可以将代码写成如下

@Test
	public void queryDatabase(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql查询操作
		rs.executeQuery("select * from hrmresource");
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
      //System.out.println("id: " + rs.getInt(1));
			System.out.println("lastname: " + rs.getString("lastname"));
      //System.out.println("lastname: " + rs.getString(2));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

看下执行结果

id: 69227
lastname: 杨文元-zzj
id: 69229
lastname: 李妍-zzj
id: 69230
lastname: 徐平-zzj
id: 69231
lastname: 赵静-zzj
id: 69232
lastname: 刘长庚-zzj
id: 69233
lastname: 付蕾-zzj
1
2
3
4
5
6
7
8
9
10
11
12

使用RecordSetexecuteQuery方法可以查询到我们所需要的数据,同样我们也可以通过其他方法来查询数据

@Test
	public void queryDatabase2(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql查询操作
		rs.execute("select * from hrmresource");
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}

	@Test
	public void queryDatabase3(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql查询操作
		rs.executeSql("select * from hrmresource",null);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
	
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

其他一些方法可以后续自行探索

如何传参呢?

# 传递参数

如果我们要查询某个条件的数据,可以通过sql拼接的形式进行查询,但是这并不值得推荐,因为只要经常开发的都知道,这个存在sql注入的风险,所以Recordset也提供了jdbcpreparedstatement操作方式,可以通过?来对参数进行站位,在执行sql时传入对应的参数即可以完成参数的传递

@Test
	public void queryDatabaseByParam(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql查询操作
		rs.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13

executeQuery方法的第二个参数是不定长的, 所以可以传入一个Object数组,与上述的传参方式是等效的

rs.executeQuery("select * from hrmresource where id = ?",new Object[]{69227});
// 或
List<Object> args = new ArrayList<>();
args.add(69227);
rs.executeQuery("select * from hrmresource where id =?",args);
1
2
3
4
5

# 更新

更新操作与查询操作类似,只是调用方法不一样而已,接下来上代码展示

@Test
	public void updateDatabase(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		rs.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
		// 执行数据sql更新操作
		if(rs.executeUpdate("update hrmresource set lastname = 'test' where id =?",69227)){
			System.out.println("更新成功");
		}
		rs.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

看输出结果

id: 69227
lastname: 杨文元-zzj
更新成功
id: 69227
lastname: test
1
2
3
4
5

接下来看下事务操作

@Test
	public void updateDatabaseByTrans() throws Exception {
		// 创建recordset对象
		RecordSetTrans rs = new RecordSetTrans();
		// 设置自动提交为false
		rs.setAutoCommit(false);
		RecordSet rsQuery = new RecordSet();
		rsQuery.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rsQuery.next()) {
			// 获取结果集信息
			System.out.println("id: " + rsQuery.getInt("id"));
			System.out.println("lastname: " + rsQuery.getString("lastname"));
		}
		// 执行数据sql更新操作
		if(rs.executeUpdate("update hrmresource set lastname = 'test-tran' where id =?",69227)){
			System.out.println("更新成功: 但是我要回滚");
		}
		// rs.rollbackOnly();
		rs.rollback();
		// 事务回滚或者提交后当前事务对象就销毁了,需要重新获取事务对象
		rs = new RecordSetTrans();
		rs.setAutoCommit(false);
		rsQuery.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rsQuery.next()) {
			// 获取结果集信息
			System.out.println("id: " + rsQuery.getInt("id"));
			System.out.println("lastname: " + rsQuery.getString("lastname"));
		}
		// 执行数据sql更新操作
		if(rs.executeUpdate("update hrmresource set lastname = 'test-tran' where id =?",69227)){
			System.out.println("更新成功: 这次提交");
		}
		rs.commit();
		rsQuery.executeQuery("select * from hrmresource where id = ?",69227);
		// 判断是否有下一行结果集
		while (rsQuery.next()) {
			// 获取结果集信息
			System.out.println("id: " + rsQuery.getInt("id"));
			System.out.println("lastname: " + rsQuery.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

看下输出结果

id: 69227
lastname: test
更新成功: 但是我要回滚
id: 69227
lastname: test
更新成功: 这次提交
id: 69227
lastname: test-tran
1
2
3
4
5
6
7
8

# 插入

插入操作与更新操作,接下来上代码展示

@Test
	public void insertDatabase(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql插入操作
		if(rs.executeUpdate("insert into hrmresource(id,lastname) values(?,?)",69326,"test-insert")){
			System.out.println("插入成功");
		}
		// 执行数据sql查询操作
		rs.executeQuery("select * from hrmresource where id = ?",69326);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

看下执行结果

插入成功
id: 69326
lastname: test-insert
1
2
3

事务操作与更新的事务操作是一样的

# 删除数据

删除操作与更新操作,接下来上代码展示

@Test
	public void deleteDatabase(){
		// 创建recordset对象
		RecordSet rs = new RecordSet();
		// 执行数据sql删除操作
		if(rs.executeUpdate("delete from hrmresource where id =?",69326)){
			System.out.println("删除成功");
		}
		// 执行数据sql查询操作
		rs.executeQuery("select * from hrmresource where id =?",69326);
		// 判断是否有下一行结果集
		if(rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}else{
			System.out.println("删除成功,数据库中查询不到数据");
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

看下执行结果

删除成功
删除成功,数据库中查询不到数据
1
2

事务操作与更新的事务操作是一样的

# 批量操作

除了基本的数据操作之外,还有批量操作的功能,接下来使用批量插入与批量删除来演示

批量插入

@Test
	public void batchInsertDatabase() {
		List<List> args = new ArrayList<>();
		List<Integer> ids = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			List arg = new ArrayList<>();
			arg.add(69327 + i);
			ids.add(69327 + i);
			arg.add("test-batch-insert_" + i);
			args.add(arg);
		}
		RecordSet rs = new RecordSet();
		if(rs.executeBatchSql("insert into hrmresource(id,lastname) values(?,?)", args)){
			System.out.println("批量插入成功");
		}
		// 	查询验证
		rs.executeQuery("select * from hrmresource where id in (?,?,?,?,?,?,?,?,?,?)", ids);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

看下执行结果

批量插入成功
id: 69327
lastname: test-batch-insert_0
id: 69328
lastname: test-batch-insert_1
id: 69329
lastname: test-batch-insert_2
id: 69330
lastname: test-batch-insert_3
id: 69331
lastname: test-batch-insert_4
id: 69332
lastname: test-batch-insert_5
id: 69333
lastname: test-batch-insert_6
id: 69334
lastname: test-batch-insert_7
id: 69335
lastname: test-batch-insert_8
id: 69336
lastname: test-batch-insert_9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

看下批量删除

@Test
	public void batchDeleteDatabase() {
		List<List> ids = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			List arg = new ArrayList<>();
			arg.add(69327 + i);
			ids.add(arg);
		}
		RecordSet rs = new RecordSet();
		if(rs.executeBatchSql("delete from hrmresource where id = ?", ids)){
			System.out.println("批量删除成功");
		}
		// 	查询验证
		rs.executeQuery("select * from hrmresource where id in (?,?,?,?,?,?,?,?,?,?)", ids);
		// 判断是否有下一行结果集
		while (rs.next()) {
			// 获取结果集信息
			System.out.println("id: " + rs.getInt("id"));
			System.out.println("lastname: " + rs.getString("lastname"));
		}
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

看下输出结果

批量删除成功
1

批量更新和插入删除是一样的接受一个List<List>的批量参数,这里需要注意的是,事务的批量操作方法接收的参数是List<List<Object>>类型的参数,所以需要注意泛型(个版本之间可能有差异,编译时期即可发现问题,无需过于担心)

二开文档   |