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 href="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")
);

Java将MySQL建表语句转换为SQLite的建表语句的更多相关文章

  1. python:sql建表语句转换为json

    第一种sql格式: CREATE TABLE prpcitem_car ( proposalno ) NOT NULL, itemno ,) NOT NULL, riskcode ) NOT NULL ...

  2. 三种常用的MySQL建表语句(转)

    MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看. 1.最简单的: CREATE TABLE t1(    ...

  3. MySQL建表语句生成Golang代码

    1. 背景 对于后台开发新的需求时,一般会先进行各种表的设计,写各个表的建表语句 然后根据建立的表,写对应的model代码.基础的增删改查代码(基础的增删改查服务可以划入DAO(Data Access ...

  4. ORACLE 建表语句(表名及字段名大写)

    ORACLE建表时如果表名或者字段名存在大小写同时存在的情况下,默认为区分大小写,此时在select/updata等操作时需要在表名或者字段名上添加双引号,否则会报"视图不存在"的 ...

  5. mysql和oracle建表语句以及数据类型的区别

    1.mysql和oracle建表语句的区别 mysql DROP TABLE IF EXISTS `order`;CREATE TABLE `order` (  `id` int(11) NOT NU ...

  6. sqlite建表语句(特别是外键问题)

    原创  sqlite建表语句(特别是外键问题) 下面图表示两个表关系: //表1User_invitecreate table User_invite(Invite_id INTEGER PRIMAR ...

  7. Python导出MySQL数据库中表的建表语句到文件

    为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息 # -*- coding: utf-8 -*- import os i ...

  8. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  9. 借助python工具从word文件中抽取相关表的定义,最后组装建表语句-非常好

    借助python工具从word文件中抽取表的定义,最后组装建表语句-非常好 --如有转载请以超链接的方式注明原文章出处,谢谢大家.请尊重每一位乐于分享的原创者 1.python脚本 ## -*- co ...

  10. sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表

    先创建一个分割表名的分割函数 --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [Split](@text NVARCHAR(max)) ) ...

随机推荐

  1. ChatGPT 打字机效果原理

    一.背景 在初次使用 ChatGPT 时,我就被打字机的视觉效果吸引.总是感觉似曾相识,因为经常在一些科幻电影中看到,高级文明回传的信息在通讯设备的屏幕上以打字机效果逐步出现,在紧张的氛围下,输出人类 ...

  2. Python安装部署 - virtualenv虚拟环境配置(Windows)

    Python安装部署 - virtualenv虚拟环境 目录 Python安装部署 - virtualenv虚拟环境 前言 安装virtualenv 搭建虚拟环境 搭建虚拟环境指定路径 PyCharm ...

  3. 【GiraKoo】面试者如何忽悠一个不懂技术的面试官

    萌新面试者如何忽悠一个不懂技术的面试官 由于公司业务需要,做了几天Android的面试官. 作为一个完全没有做过Android项目的开发者,我无法问出具体的框架,技术细节. 对于萌新,新公司,新业务往 ...

  4. 为什么有了 HTTP 还要 RPC

    哈喽大家好,我是咸鱼 随着互联网技术的发展,分布式架构越来越被人们所采用.在分布式架构下,为了实现复杂的业务逻辑,应用程序需要分布式通信实现远程调用 而这时候就需要一种协议来支持远程过程调用,以便实现 ...

  5. Docker安装MS SQL Server并使用Navicat远程连接

    MS SQL Server简介 Microsoft SQL Server(简称SQL Server)是由微软公司开发的关系数据库管理系统,它是一个功能强大.性能卓越的企业级数据库平台,用于存储和处理大 ...

  6. 用 Python 帮运营妹纸快速搞定 Excel 文档

    Microsoft Office 被广泛用于商务和运营分析中, 其中 Excel 尤其受欢迎.Excel 可以用于存储表格数据.创建报告.图形趋势等.在深入研究用 Python 处理 Excel 文档 ...

  7. EndNote参考文献格式Output Styles界面介绍

      本文对EndNote软件修改论文参考文献引用格式的界面与各选项参数加以详细介绍.   利用EndNote软件进行论文参考文献的插入可以说是非常方便:但其亦具有一个问题,就是对中文文献的支持不太友好 ...

  8. StencilJs学习之组件装饰器

    stenciljs 可以方便的构建交互式组件 支持以下装饰器 component state prop watch method element event listen Component 装饰器 ...

  9. 用虚拟机配置Linux实验环境

    我们平时经常需要利用VMware搭建Linux实验环境,下面我将搭建步骤整理了一下. 安装虚拟机 系统镜像:CentOS-7-x86_64-Everything-1708.iso 用VMware安装系 ...

  10. Maven配置私有仓库

    前言   当公司或个人具有自己独有的jar时,不想公开,一般就会放在自己的私有Maven仓库中,在项目中需要引用,此时就需要将公司私有仓库配置到maven当中,一般我们的maven配置的都是aliyu ...