Java将MySQL建表语句转换为SQLite的建表语句

这篇具有很好参考价值的文章主要介绍了Java将MySQL建表语句转换为SQLite的建表语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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='企业基本信息表';

转换后文章来源地址https://www.toymoban.com/news/detail-666227.html

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的建表语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HBase导出建表语句

    HBase导出建表语句 HBase是一个面向大数据的分布式列存数据库,它以Hadoop作为底层存储和计算平台。在HBase中,数据以表的形式存储,每个表由行和列组成。本文将介绍如何使用HBase导出建表语句,并提供相应的代码示例。 在HBase中,建表语句用于创建表和指定表的列族。表由

    2024年02月21日
    浏览(32)
  • hive、pg库,建表语句及查询表结构语句

    hive 建表语句 hive 查询表结构语句   pg库建表语句

    2024年02月11日
    浏览(48)
  • hive建表语句 增加字段、分区基础操作

    目录 hive建表 内部分区表 外部分区表 表结构复制: hive表删除 hive表重命名 表修改操作 增加分区 修改分区 删除分区 新增表字段  IF NOT EXISTS : 表不存在才会创建  分隔符: field.delim是表的两个列字段之间的文件中的字段分隔符.                serialization.format是文件序列化

    2024年02月06日
    浏览(41)
  • 在navicat中利用sql语句建表+添加数据

    一个小小的记录。 首先双击激活localhost,再右键选择新建数据库,数据库名字定义好。 接着点击该数据库的查询,点击右边的新建查询,在里面输入sql语句就好了。 例如这边创建一个student表 这边就是为这个student表添加数据,记得刷新!

    2024年02月11日
    浏览(47)
  • oracle如果不适用toad或者plsql工具如何获取索引建表语句

    这个语句可以获取dixon用户的所有索引创建语句,sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob 这样看着不清楚,很麻烦,不好批量复制 也可以通过这个语句批量获取建表语句 注意这个后面一定要写生owner=用户信息 这个参数,不然可

    2024年02月06日
    浏览(61)
  • 一百八十九、ClickHouse——在海豚调度器中执行ClickHouse建库建表语句

    由于Hive处理好的结果数据要同步到ClickHouse中,因此需要在在海豚调度器中执行ClickHouse的ADS层的建库建表语句 1、直接在海豚中创建执行SQL文件脚本的工作流 (1)第一步,在资源中心上传ADS层的建库建表SQL文件 (2)第二步,在项目里建工作流,添加运行SQL文件的脚本 #! /b

    2024年02月07日
    浏览(47)
  • 理解case when then else end 的使用,基础概念,建表语句,用例讲解

    case :表示需要处理的字段 when :表示条件 then :表示当when执行为true时,再执行的语句 else :表示当所有的when执行为false时,再执行的语句 end:表示 case 语句结束的结尾 图形化表格 执行sql语句 结果 讲解:进行匹配的是名字name,首先匹配第一行,name是等于张三,所以返回

    2024年02月08日
    浏览(65)
  • sqlite插入语句id自增列问题

    sqlite给主键id设置AUTOINCREMENT自增在插入数据的时候报错table has x columns but x-1 values were supplied 为什么自增列要显示不提供,sqlite需要提供自增列table ResTools has 7 columns but 6 values were supplied SQL Statement:insert into ResTools values(\\\'管理系统winform+Sqlite\\\',\\\'项目\\\\C#程序设计\\\\C#winform项目\\\\管理系

    2024年01月18日
    浏览(30)
  • mysql建表

    create  database storeexpm use stuexpm;进入stuexpm数据库 1.create table employee创建表 .输入表中存在的相关数据 desc employee显示表。 2.create table department创建表 desc department显示表  由employee 表使用复制方式创建employee1表  在employee表中增加一列eno,添加到表的第一列,不为空,取值唯一并

    2024年02月09日
    浏览(26)
  • 如何查看 MySQL 建表时间

    MySQL 是一款性能良好,易于使用的关系型数据库管理系统。我们可以使用 SQL 语句查看 MySQL 建表时间,以便获取建立表时的更多信息。 1、 首先,在 MySQL 中执行以下命令,获取表的列表: 2、我们还可以使用 MySQL 函数来查询建表时间: 把 table_name 换成需要查询的表名即可

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包