MySQL转H2

项目场景:

在使用内嵌数据库写测试用例时,遇到的MySQL导出的 .sql 文件,无法正常写入到H2内嵌数据库问题

代码示例:

    @Test
    public void h2(){
        try {
            System.out.println(convert("D:\\idea\\projects\\新能源\\app_alarm_mileage_statistic_single.sql"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }




    public static String convert(String filePath) throws IOException {
        String[] rawSQL = new String(Files.readAllBytes(Paths.get(filePath))).split("\\n");
        StringBuilder builder = new StringBuilder();

        for(String line : rawSQL) {
            if(line.contains("CHARACTER SET utf8 COLLATE utf8_general_ci")) {
                line = line.replaceAll("CHARACTER SET utf8 COLLATE utf8_general_ci", "");
            } else if(line.contains("INDEX")) {
                continue;
            } else if(line.contains("IF NOT EXISTS")) {
                line = line.replaceAll("IF NOT EXISTS", "");
            } else if(line.contains("--")) {
                continue;
            } else if(line.contains("ENGINE")) {
                line = line.replaceAll("\\).*ENGINE.*(?=)", ");");
            }else if (line.contains("USING BTREE")){
                line = line.replaceAll("USING BTREE*","");
            }

            line = line.replace("`", "");
            builder.append(line).append("\n");
        }
        return builder.toString();
    }

处理前的sql:

-- ----------------------------
-- Table structure for app_alarm_year_statistic_single
-- ----------------------------
DROP TABLE IF EXISTS  app_alarm_year_statistic_single ;
CREATE TABLE  app_alarm_year_statistic_single   (
   id  bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '序号',
   vin  varchar(17) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'vin码',
   oem  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '整车厂',
   brand  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '品牌',
   car_type  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '车型',
   st_date  char(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据日期(yyyyMMdd)',
   create_datetime  datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
   update_datetime  datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
  PRIMARY KEY ( id ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 37 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

处理后的sql:

-- ----------------------------
-- Table structure for app_alarm_year_statistic_single
-- ----------------------------
DROP TABLE IF EXISTS app_alarm_year_statistic_single;
CREATE TABLE app_alarm_year_statistic_single
(
    id                           bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '序号',
    vin                          varchar(17) NOT NULL COMMENT 'vin码',
    oem                          varchar(20) NULL DEFAULT NULL COMMENT '整车厂',
    brand                        varchar(20) NULL DEFAULT NULL COMMENT '品牌',
    car_type                     varchar(20) NULL DEFAULT NULL COMMENT '车型',
    st_date                      char(8) NULL DEFAULT NULL COMMENT '数据日期(yyyyMMdd)',
    create_datetime              datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
    update_datetime              datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
    PRIMARY KEY (id)
);

数据插入语句一样需要执行此代码处理。

代码比较简单, 注释里面有说明, 不一定能处理所有情况, 但是我这里是可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值