使用jsqlparser创建MySQL建表语句

语法

create table [IF NOT EXISTS] 表名 (

字段名 类型 [约束条件],

字段名 类型 [约束条件],

字段名 类型 [约束条件],

字段名 类型 [约束条件]

);

  • 字段定义在括号内
  • 约束条件可以有多个
  • 多个字段定义之间用都会隔开

常见约束

  • NOT NULL 非空
  • DEFAULT 0 默认值
  • AUTO_INCREMENT 自增长
  • PRIMARY KEY 主键

示例

sql 复制代码
create table if not exists t_one (
  id bigint(20) UNSIGNED NOT NULL auto_increment primary key COMMENT '主键',
  name varchar(64) COMMENT '名称',
  age int(10) COMMENT '仙人寿命'
) engine=innoDB default charset=utf8mb4;

Jsqlparser创建建表语句

引入依赖

xml 复制代码
     <dependency>
         <groupId>com.github.jsqlparser</groupId>
         <artifactId>jsqlparser</artifactId>
         <version>4.3</version>
     </dependency>

Demo

java 复制代码
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import net.sf.jsqlparser.statement.create.table.ColumnDefinition;
import net.sf.jsqlparser.statement.create.table.CreateTable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CreateTableDemo {
    public static void main(String[] args)throws Exception {
        CreateTable createTable = new CreateTable();
        // 设置表名
        Table table = new Table("t_one");
        createTable.setTable(table);
        // 定义字段
        // id
        ColDataType bigint = new ColDataType("BIGINT");
        bigint.setArgumentsStringList(Collections.singletonList("20"));
        ColumnDefinition id = new ColumnDefinition("id", bigint);
        id.setColumnSpecs(Arrays.asList("UNSIGNED", "NOT NULL", "PRIMARY KEY", "AUTO_INCREMENT", "COMMENT '主键'"));
        // name
        ColDataType varchar = new ColDataType("VARCHAR");
        varchar.setArgumentsStringList(Collections.singletonList("64"));
        ColumnDefinition name = new ColumnDefinition("name", varchar);
        name.setColumnSpecs(Collections.singletonList("COMMENT '名字'"));
        // age
        ColDataType anInt = new ColDataType("INT");
        ColumnDefinition age = new ColumnDefinition("age", anInt);
        age.setColumnSpecs(Collections.singletonList("COMMENT '仙人年龄'"));
        // 设置字段
        List<ColumnDefinition> columnDefinitionList = new ArrayList<>();
        columnDefinitionList.add(id);
        columnDefinitionList.add(name);
        columnDefinitionList.add(age);
        createTable.setColumnDefinitions(columnDefinitionList);
        // 设置IF NOT EXISTS
        createTable.setIfNotExists(true);
        // 设置引擎、字符集、排序规则
        createTable.setTableOptionsStrings(Arrays.asList("ENGINE = InnoDB", "CHARACTER SET = utf8mb4", "COLLATE = utf8mb4_general_ci"));
        // 打印建表语句
        System.out.println(createTable);
    }
}

结果:

sql 复制代码
CREATE TABLE IF NOT EXISTS t_one (id BIGINT (20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键', name VARCHAR (64) COMMENT '名字', age INT COMMENT '仙人年龄') ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci
相关推荐
firepation1 小时前
基于 SpringBoot线上考试系统的设计与实现
java·spring boot·mysql·源码·课程设计
这名字应该不会重复吧1 小时前
postgreSQL创建表分区
java·数据库·postgresql
处女座_三月1 小时前
图片和短信验证码(头条项目-06)
数据库·sqlite
慧集通-让软件连接更简单!1 小时前
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)
数据库·api·ddd·系统集成·集成平台·业务对象·业务建模
利刃大大4 小时前
【MySQL基础篇】十三、用户与权限管理
数据库·mysql
艾思科蓝 AiScholar5 小时前
【IEEE出版,连续4年EI收录,检索稳定 |南京航空航天大学主办,航空航天交叉研究院承办】第五届传感器与信息技术国际学术会议(ICSI 2025)
数据库·人工智能·物联网·机器学习·目标跟踪·机器人·信号处理
小奥超人5 小时前
【PPT解密】ppt只读文档怎么改成可编辑文档
数据库·windows·经验分享·powerpoint·办公技巧
WhoisXMLAPI8 小时前
新的 WhoisXML API 白皮书重点分析了主要 gTLD 和 ccTLD 注册趋势
运维·服务器·网络·数据库·网络协议·安全
张声录18 小时前
Redis Exporter 安装与配置指南(v1.67.0)
数据库·redis·缓存
周某人姓周9 小时前
VM下载使用mysql
mysql