使用jsqlparser创建MySQL建表语句

语法

create table [IF NOT EXISTS] 表名 (
字段名 类型 [约束条件],
字段名 类型 [约束条件],
字段名 类型 [约束条件],
字段名 类型 [约束条件]
);

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

常见约束

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

示例

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创建建表语句

引入依赖

     <dependency>
         <groupId>com.github.jsqlparser</groupId>
         <artifactId>jsqlparser</artifactId>
         <version>4.3</version>
     </dependency>

Demo

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);
    }
}

结果:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL建表时语句过长,可以使用Java编写程序来生成SQL语句。以下是一个使用jsqlparser库的Java代码示例: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.List; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.create.table.CreateTable; import net.sf.jsqlparser.util.deparser.CreateTableDeParser; public class GenerateSql { public static void main(String[] args) { String filePath = "table.sql"; // 建表语句所在文件路径 File file = new File(filePath); InputStream inputStream = null; try { inputStream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } try { Statement statement = CCJSqlParserUtil.parse(inputStream); if (statement instanceof CreateTable) { CreateTable createTable = (CreateTable) statement; CreateTableDeParser createTableDeParser = new CreateTableDeParser(); createTableDeParser.deParse(createTable); List<String> statements = createTableDeParser.getStatements(); for (String sql : statements) { System.out.println(sql); } } } catch (JSQLParserException e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 这个程序会读取指定路径下的建表语句文件,然后使用jsqlparser库解析SQL语句,最后生成多条不超过MySQL限制长度的SQL语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值