Java实现批量创建触发器的脚本

/*
* 参数 fields表示数据表的所有字段的数组类型
* 获取数据表的字段的sql语句见下文
*/

    private static CharSequence createUpdateTrriger(String tableName, String[] fields) {
        StringBuilder sb = new StringBuilder();  
        sb.append("create trigger tri_"+tableName+"_update\n"  
                        + "  after UPDATE on " + tableName + "\n"  
                        + "  for each    row\n "  
                        + "begin\n"  
                        + "  insert into " + tableName +"_his"+ "\n"  
                                + "(" + "id_his");  
        for(int i = 0 ; i < fields.length ; i++){  
            if(!"QZKRKSJ".equals(fields[i])&& !"QZKXGSJ".equals(fields[i]) && !"".equals(fields[i])){  
                sb.append(", "+ "`"+fields[i]+"`");  
            }  
        }
        sb.append(",htime");//time_trig
        sb.append(")\n"  
                + "(SELECT REPLACE(UUID(), '-', '')");  
        for(int i = 0 ; i < fields.length ; i++){  

            if(!"QZKRKSJ".equals(fields[i])&& !"QZKXGSJ".equals(fields[i]) && !"".equals(fields[i])){  

                sb.append(",new."+ fields[i]);  
            }  
        }  
        sb.append(",now());\nend; " + "\n" + "\n"); 
        return sb.toString();
    }
获取数据表的字段的sql语句:
String sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name ='"+tableName+"'"+"and TABLE_SCHEMA='"+schema+"'"; 

另外遇到一个关于触发器的隐藏bug
数据库的迁移过程中会携带触发器。触发器创建语句的注释中会带有前期触发器创建的用户名,如图:
这里写图片描述

迁移后,数据源的用户名发生变化,系统就会报错,找不到原来的用户。
报错:The user specified as a definer (‘用户名’@’%’) does not exist
解决,换掉用户名重新创建触发器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值