# rouyi-db2 **Repository Path**: liao_ru_qi/rouyi-db2 ## Basic Information - **Project Name**: rouyi-db2 - **Description**: rouyi-oracel 改的 db2版本管理框架 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 4 - **Created**: 2021-08-25 - **Last Updated**: 2025-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, db2 ## README # Oracle转db2 若依版本 [https://github.com/yangzongzhuan/RuoYi-Oracle](https://github.com/yangzongzhuan/RuoYi-Oracle) ## sql number -》 INTEGER 和 BIGINT 两种 根据number长度决定 varchar2 varchar -》 VARCHAR char -》 CHARACTER date -》 TIMESTAMP db2获取当前时间方法只有这一组 我找到的 CURRENT TIMESTAMP ( sysdate -》 CURRENT TIMESTAMP) -- db2日期时间 date 只有年月日 time 只有时分秒 TIMESTAMP 年月日时分秒 https://www.cnblogs.com/lbnnbs/p/4781523.html 索引要根据情况缩减 db2 长度太长会出问题 ## 依赖及建立连接 ```xml db2jcc4 com.ibm.db2.jcc db2jcc ${db2.version} ``` ```yaml driverClassName: com.ibm.db2.jcc.DB2Driver druid: # 主库数据源 master: url: jdbc:db2://192.168.2.245:50000/HMHDDB:currentSchema=DEMO; username: root password: 123456 ``` > 修改到此步已经可以启动了,但运行会出错,xml文件里的sql还没改 ## 改xml sql ```sql -- 将insert的 select (.*).nextval as .* from DUAL -- 替换成下面 (获取自增 需要有 sequence 可用正则替换) values nextval for $1 to_date() -- 里面不能使用#{} 用 concat( #{},'') -- SysUserOnlineMapper.saveOnline merge into sys_user_online a using (select count(1) as co,'${sessionId}' as sessionid from sys_user_online where sessionid = #{sessionId}) b on (co>0 and b.sessionid = a.sessionid) when matched then update set login_name = #{loginName}, dept_name = #{deptName}, ipaddr = #{ipaddr}, login_location = #{loginLocation}, browser = #{browser}, os = #{os}, status = #{status}, start_timestamp = #{startTimestamp}, last_access_time = #{lastAccessTime}, expire_time = #{expireTime} when not matched then insert values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime}) SysMenuMapper visible = 0 => visible = '0' nvl(m.perms,'') => (case when m.perms is not null then m.perms else '' end) ``` > 进行到这里 可以 登录了 > 测试用户管理 > 分页 ```yaml pagehelper: helperDialect: DB2 ``` ```xml ``` ```sql ${db2databaseName.}FIND_IN_SET (char(${deptId}), ancestors) FIND_IN_SET 方法不能使用#{} 会报错(-418 42610 参数标识符运用无效) 需改${} 前加${db2databaseName.} char() 将数字转字符 ``` >新增 ```sql -- Unique判断唯一的sql select * from (select rownumber() over() as rownum,a.* from ( sql ) a ) a where rownum 1 -- checkLoginNameUnique 为毛你是count 还加rownum啊啊啊 select count(1) from sys_user where login_name=#{loginName} -- insert all db2没有这个 用mysql那个 insert into sys_role_dept(role_id, dept_id) values (#{item.roleId},#{item.deptId}) ``` > 修改 导出 等其余操作均无问题 > 角色 查询 新增 等均无问题 > 修改 > ```sql --selectMenuTree select concat(trim(char(m.menu_id)), -- char 数据库是char(10),但是实际保存时只给了6位,那么数据库自动添加4位空格 使用char时配合trim方法 ``` > 最后 代码生成 ```xml select lower(tabname) as table_name,create_time as create_time,STATS_TIME as update_time,remarks as table_comment from syscat.tables where tabschema =UPPER('${db2databaseName}') and tabname not like 'QRTZ_%' and tabname not like 'GEN_%' and lower(tabname) not in (SELECT table_name FROM gen_table) ``` >最后将generator的vm文件修改 -- sql.vm -- 菜单 SQL insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(${table.menuId}, '${functionName}', ${parentMenuId}, 1, '/${moduleName}/${businessName}', 'C', '0', '${permissionPrefix}:view', '#', 'admin', CURRENT TIMESTAMP, '', null, '${functionName}菜单'); -- 按钮 SQL insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(nextval for seq_sys_menu, '${functionName}查询', ${table.menuId}, 1, '#', 'F', '0', '${permissionPrefix}:list', '#', 'admin', CURRENT TIMESTAMP, '', null, ''); insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(nextval for seq_sys_menu, '${functionName}新增', ${table.menuId}, 2, '#', 'F', '0', '${permissionPrefix}:add', '#', 'admin', CURRENT TIMESTAMP, '', null, ''); insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(nextval for seq_sys_menu, '${functionName}修改', ${table.menuId}, 3, '#', 'F', '0', '${permissionPrefix}:edit', '#', 'admin', CURRENT TIMESTAMP, '', null, ''); insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(nextval for seq_sys_menu, '${functionName}删除', ${table.menuId}, 4, '#', 'F', '0', '${permissionPrefix}:remove', '#', 'admin', CURRENT TIMESTAMP, '', null, ''); insert into sys_menu (menu_id, menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) values(nextval for seq_sys_menu, '${functionName}导出', ${table.menuId}, 5, '#', 'F', '0', '${permissionPrefix}:export', '#', 'admin', CURRENT TIMESTAMP, '', null, ''); -- mapper.xml.vm sql 修改上面有说明就是那两个insert ```yaml version: '3.1' services: db2: image: ibmcom/db2 restart: always container_name: db2 privileged: true environment: LICENSE: accept DB2INST1_PASSWORD: 123456 DBNAME: DB2DB volumes: - ./db2data:/database ports: - 50000:50000 ``` ```bash #创建用户组 groupadd db2group #添加用户到该组 useradd -m -g db2group -d /home/db2root db2root #修改test密码 passwd db2root #连续输入两次密码 #切换到db2inst1用户下给db2root赋予连接权限 su db2inst1 #连接数据库 db2 connect to db2db #赋予连接权限 db2 grant connect on database to user db2root #赋予增删改查权限 db2 grant DATAACCESS on database to user db2root #赋予数据库权限 db2 grant DBADM on database to user db2root #关闭连接 db2 connect reset #其他常用命令 #创建数据库 db2 create db db2db using codeset utf-8 territory CN #查看当前所有数据库 db2 list db direcotry #查看库中的表名 db2 list tables #更多命令省略 ```