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
解决,换掉用户名重新创建触发器。

发布了137 篇原创文章 · 获赞 123 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/lz20120808/article/details/80846368