java代码新增数据库字段

上次遇到一个问题,提供数字r250-r500,要求在数据库中新增r250到r500的字段,同时这些字段也可能存在于数据库表中,同时使用了  allowMultiQueries=true在配置中,实现了同时多个insert,只需用;隔开即可

这里不想使用手写,于是写了一个不完善的接口

service层

        //起始数字,结尾数字,表名
        int startNum=250;
        int endNum=300;
        String str0 = "";
        for (int i = 0; i <endNum-startNum ; i++) {
            String str1 = "ALTER TABLE aps_ord ADD COLUMN "+"d"+ startNum + " varchar(100) COMMENT 'r48'";
            str0 +=str1;
        }
        String str =str0.toUpperCase();
//        判断:必须是同表的新增字段sql;
//        1.按照 ; 切割,提取成字段名做key,sql 做成value,做成map
//        2.查出该表所有字段,
//        3.剔除有的需要新增的字段(map key)
//        4.剩下的value拼接起来

        List<String> lists = Arrays.stream(str.split(";")).collect(Collectors.toList());
        Map<String,String> map =new HashMap<>();
        for (String i : lists) {
            List<String> listi = Arrays.stream(i.split("\\s+")).collect(Collectors.toList());//一条sql按空格切割
            String sub =""; //key
            int addIndex = listi.indexOf("ADD");  //column可能会省略,用add确定位置
            sub = listi.get(addIndex+2);
            map.put(sub,i);
        }
        String tableName =StringUtils.substringBetween(lists.get(0),"TABLE","ADD").trim();//截取字符,去掉空格;
        List<String> list =baseMapper.showTable(tableName);
        for (String strOne:list) {
            strOne.toUpperCase();
        }
        for (int i = 0; i <list.size(); i++) {
            map.remove(list.get(i));
        }
        String s="";
        Collection<String> values = map.values();
        for (Object value: values){
            s =s+value+";";
        }

        baseMapper.alterTable(s);

mapper

    int alterTable(String sqlString);

    List<String> showTable(@Param("tableName") String tableName);

xml

用$是因为,在代码中的判断是

select column_name from information_schema.columns 
where table_schema = 'fl' and table_name = 'aps_ord' ;

带有单引号,无法使用#来判断,会报错

    <update id="alterTable" >
        ${sqlString}
    </update>

    <select id="showTable" resultType="java.lang.String">
        select column_name from information_schema.columns where table_schema = 'fl' and table_name = '${tableName}';
    </select>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值