场景
刚开始做数据库适配的时候,这是一个棘手的问题,因为MySQL的库里,表结构,字段都是最新的,但是金仓的库,全是旧版本的表结构。需要把我们模块的表结构,同步到金仓中。
虽然金仓有数据库同步工具,但是直接把所有表都给同步过来,难免会影响到其他模块。
然后就写了一个工具类来进行这一操作。
原理:获取MySQL中,指定的某几张表,通过程序,获取表的字段,字段类型,长度,注释,主键,索引,标注释等等,然后生成金仓中的可执行SQL,自动执行。
(ps由于,工具类纯自己手写,因此设置了vip文章,非vip成员要获取联系作者)
首先先看一下金仓的创建表语法和删除表语法:
这俩个语法和MySQL不同,包括创建表时,给字段加注释,给表加注释的方式都不同!
创建表:
给字段加注释,直接在字段后面用 comment 'xxxxx'会报错,同样给表加注释直接在表的后面指定comment也会报错,必须要在语句的最后统一指定,试了好多次错才找到解决方法。
举个例子:
CREATE TABLE "PUBLIC"."rec_a01_his" (
"A00" VARCHAR(36 char) NOT NULL PRIMARY KEY,
"R0101" VARCHAR(60 char) NULL ,
"R0102" VARCHAR(10 char) NULL ,
"R0103" VARCHAR(10 char) NULL ,
"R0104" DATE NULL ,
"RECTYPEID" VARCHAR(100 char) NULL ,
"DELETEFLAG" VARCHAR(2 char) NULL DEFAULT 0,
"CREATETIME" TIMESTAMP NULL ,
"CREATEUSER" VARCHAR(36 char) NULL ,
"UPDATETIME" TIMESTAMP NULL ,
"UPDATEUSER" VARCHAR(36 char) NULL
)
WITH (
OIDS=FALSE
);
COMMENT ON TABLE "PUBLIC"."rec_a01_his" IS '基本情况';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."R0101" IS '姓名';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."R0102" IS '性别';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."DELETETIME" IS '删除时间';
COMMENT ON COLUMN "PUBLIC"."rec_a01_his"."DELETEUSER" IS '删除人';
CREATE INDEX "rec_a01_his_rectypeid" ON "PUBLIC"."rec_a01_his" (RECTYPEID);
删除表:如果存在就删除,不存在执行也不报错
DROP TABLE IF EXISTS "rec_a01_his" CASCADE;
案例
下面提供的工具接口中 一共有三个接口:(支持一次输入多张表,多个表名之间用英文逗号分隔)
第一个:根据输入的表名,输出/控制台打印出可执行的新建表SQL。
第二个:根据输入的表名,输出/控制台打印出可执行的删除表SQL。
第三个:根据输入的表名,先删除这张表,再重新从MySQL中获取结构,然后再通过建表SQL进行新建。
No1:
发请求:rec_test为测试表
控制台输出:
可以直接复制到金仓去执行。
No2:
rec_test为测试表,生成它的删除语句,这个比较简单