Java将MySQL建表语句转换为SQLite的建表语句
源代码:- package com.fxsen.platform.core.util;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * mysql转SQLite
- *@Author: <a target="_blank" href="https://www.cnblogs.com/mailto:fxsen@foxmail.com">Fxsen</a>
- *@CreateTime: 2023年08月22日 15:46
- */
- public class MysqlToSqLiteUtil {
- public static final Map<String, String> FIELD_TYPE_MAP = new HashMap<>();
- static {
- FIELD_TYPE_MAP.put("int", "INTEGER");
- FIELD_TYPE_MAP.put("bigint", "INTEGER");
- FIELD_TYPE_MAP.put("tinyint", "INTEGER");
- FIELD_TYPE_MAP.put("smallint", "INTEGER");
- FIELD_TYPE_MAP.put("mediumint", "INTEGER");
- FIELD_TYPE_MAP.put("float", "REAL");
- FIELD_TYPE_MAP.put("double", "REAL");
- FIELD_TYPE_MAP.put("decimal", "NUMERIC");
- FIELD_TYPE_MAP.put("varchar", "TEXT");
- FIELD_TYPE_MAP.put("char", "TEXT");
- FIELD_TYPE_MAP.put("text", "TEXT");
- FIELD_TYPE_MAP.put("enum", "TEXT");
- FIELD_TYPE_MAP.put("datetime", "TEXT");
- FIELD_TYPE_MAP.put("timestamp", "TEXT");
- FIELD_TYPE_MAP.put("date", "TEXT");
- FIELD_TYPE_MAP.put("time", "TEXT");
- FIELD_TYPE_MAP.put("blob", "BLOB");
- FIELD_TYPE_MAP.put("bit", "TEXT");
- FIELD_TYPE_MAP.put("boolean", "INTEGER");
- FIELD_TYPE_MAP.put("set", "TEXT");
- FIELD_TYPE_MAP.put("json", "TEXT");
- FIELD_TYPE_MAP.put("geometry", "BLOB");
- FIELD_TYPE_MAP.put("point", "BLOB");
- FIELD_TYPE_MAP.put("linestring", "BLOB");
- FIELD_TYPE_MAP.put("polygon", "BLOB");
- FIELD_TYPE_MAP.put("multipoint", "BLOB");
- FIELD_TYPE_MAP.put("multilinestring", "BLOB");
- FIELD_TYPE_MAP.put("multipolygon", "BLOB");
- FIELD_TYPE_MAP.put("geometrycollection", "BLOB");
- }
- public static void main(String[] args) {
- String createTableStatement = "CREATE TABLE `t_enterprise_info` (\n" +
- " `id` varchar(32) NOT NULL COMMENT '主键ID',\n" +
- " `category_id` text COMMENT '企业类别ID',\n" +
- " `name` varchar(255) DEFAULT NULL COMMENT '企业名称',\n" +
- " `social_credit_code` varchar(255) DEFAULT NULL COMMENT '社会信用代码',\n" +
- " `org_code` varchar(255) DEFAULT NULL COMMENT '组织机构代码',\n" +
- " `address` varchar(255) DEFAULT NULL COMMENT '街(村)、门牌号(实际经营地)',\n" +
- " `register_address` varchar(255) DEFAULT NULL COMMENT '单位注册地',\n" +
- " `legal_person` varchar(255) DEFAULT NULL COMMENT '单位法人',\n" +
- " `open_date` varchar(50) DEFAULT NULL COMMENT '开业时间',\n" +
- " PRIMARY KEY (`id`) USING BTREE\n" +
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='企业基本信息表';";
- System.out.println(convertMysqlToSQLite(createTableStatement));
- }
- public static String convertMysqlToSQLite(String mysqlStatement) {
- // 删除COMMENT
- String reg = "COMMENT\\s*'.*?'";
- Pattern pattern = Pattern.compile(reg);
- Matcher matcher = pattern.matcher(mysqlStatement);
- String result = matcher.replaceAll("")
- .replaceAll("\\).*?;", ");")
- .replaceAll("USING BTREE","")
- .replaceAll("`",""");
- // 替换 MySQL 建表语句中的数据类型和关键字为 SQLite 的等价语句
- for (String key : FIELD_TYPE_MAP.keySet()) {
- // 生成正则表达式,匹配字段类型
- String regex = "\\b" + key + "\\b";
- Pattern pattern2 = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
- Matcher matcher2 = pattern2.matcher(result);
- // 执行替换
- result = matcher2.replaceAll(FIELD_TYPE_MAP.get(key));
- }
- // 返回替换后的 SQLite 建表语句
- return result;
- }
复制代码 转换前:- CREATE TABLE `t_enterprise_info` (
- `id` varchar(32) NOT NULL COMMENT '主键ID',
- `category_id` text COMMENT '企业类别ID',
- `name` varchar(255) DEFAULT NULL COMMENT '企业名称',
- `social_credit_code` varchar(255) DEFAULT NULL COMMENT '社会信用代码',
- `org_code` varchar(255) DEFAULT NULL COMMENT '组织机构代码',
- `address` varchar(255) DEFAULT NULL COMMENT '街(村)、门牌号(实际经营地)',
- `register_address` varchar(255) DEFAULT NULL COMMENT '单位注册地',
- `legal_person` varchar(255) DEFAULT NULL COMMENT '单位法人',
- `open_date` varchar(50) DEFAULT NULL COMMENT '开业时间',
- PRIMARY KEY (`id`) USING BTREE
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='企业基本信息表';
复制代码 转换后:- CREATE TABLE "t_enterprise_info" (
- "id" TEXT(32) NOT NULL ,
- "category_id" TEXT ,
- "name" TEXT(255) DEFAULT NULL ,
- "social_credit_code" TEXT(255) DEFAULT NULL ,
- "org_code" TEXT(255) DEFAULT NULL ,
- "address" TEXT(255) DEFAULT NULL ,
- "register_address" TEXT(255) DEFAULT NULL ,
- "legal_person" TEXT(255) DEFAULT NULL ,
- "open_date" TEXT(50) DEFAULT NULL ,
- PRIMARY KEY ("id")
- );
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |