# 项目化适配人大金仓R6 Mysql模式
官网下载人大金仓,安装时,选择MySQL模式
# 免责申请
此方案仅供参考,面向必须使用人大金仓MySQL的客户做项目化参考,其中所有修改都涉及定制开发成本,并且后期维护成本不低,尤其是升级!
项目化支持,意味着可能存在项目化适配成本,并且项目化过程中产生的BUG、以及后续OA版本升级需要额外项目化成本解决
转库注意事项:
如项目需要Oracle、SQLServer、PostgreSQL或其它数据库转MySQL数据库均存在转库风险,MySQL数据库每行数据不能超过65535字节,意味着:
- 如使用utf8字符集(每个字符3字节),则单表字段VARCHAR总和不能超21845;
- 如使用utf8mb4字符集(每个字符4字节),则单表字段VARCHAR总和不能超16383;
- 而Oracle等数据库则无此限制(意味着原库单表字段VARCHAR总和超过21845),此时转MySQL会直接报错
- 此问题常见于表单动态表(formmain_xxx),稍微复杂一点的表单即会遇到
- 此问题是数据库架构决定,应用层面无优化方案,如要解决,就必须人工调整、拆分表单,成本周期较长
# 操作步骤&解决方案
目前协同服务标准只适配了人大金仓R3(PG模式),人大金仓R6 Oracle模式
# 适配人大金仓R6 Mysql模式需做如下改动:
# 一、协同系统仍然走人大金仓的驱动和语言包,连接方式不需要做任何调整
# 二、取人大金仓R6 Mysql模式安装版本的驱动包
# 三、语法调整
1、ALL_TAB_COLUMNS替换成 INFORMATION_SCHEMA.COLUMNS 2、ALL_TABLES替换成 INFORMATION_SCHEMA.TABLES 3、USER_TABLES替换成 INFORMATION_SCHEMA.TABLES 4、all_ind_columns替换成sys_indexes
# 四、改动类
以下做为示例,能解决大部分问题,剩余的需要按语法差异做调整 1、ctp-core CTPKingbase8Dialect.java方法isExistColumnSQL,表名ALL_TAB_COLUMNS替换成INFORMATION_SCHEMA.COLUMNS
2、ctp-log-elasticsearch KingbaseDialect.java方法dmlOfTables,表名all_tables替换成INFORMATION_SCHEMA.TABLES
3、cap-api FormTableIndexBean.java方法searchIndexSql,ReportDBUtils.isKingBaseesSQLRunTime()分支, 表名all_ind_columns替换成sys_indexes,table_name替换成tablename, column_name替换成indexname,传参改成索引名(现传的是字段名)
4、cap-trigger-engine CAP4FormTriggerRecordDAOImpl.java方法hasRecordTable,JDBCAgent.isKingBaseesRunTime()分支下, 表名user_tables替换成INFORMATION_SCHEMA.TABLES
5、后续待客户验证完,再做完善
快速跳转
