JSQLParser源码分析之CreateTable

本文深入分析了JSQLParser库中的CreateTable相关源码,包括ColDataType、ColumnDefinition、Index等关键类的结构和功能。通过源码,我们可以理解如何在JavaCC中实现对CREATE TABLE语句的支持,以及如何处理列定义、数据类型和索引创建等细节。
摘要由CSDN通过智能技术生成

源码地址 https://github.com/JSQLParser/JSqlParser


源码分析


ColDataType 列数据类型


有2个属性:

  • String dataType 标识数据类型
  • List argumentsStringList 类型参数

例如

  `user_num` VARCHAR(50) NOT NULL COMMENT '用户编号'

中的 VARCHAR(50) NOT NULL VARCHAR是数据类型 (50) 是argumentList参数,通过sql语句基础知识可知,类似(50)可以没有。

 public String toString() {
        return dataType + (argumentsStringList!=null?" "+PlainSelect.getStringList(argumentsStringList, true, true):"");
    }

toString()方法,PlainSelect.getStringList(true,true)两个true,true标识加括号,加逗号 如 VARCHAR(50,20)这样。


ColumnDefinition 列定义


三个属性

  • private String columnName     列名字
  • private ColDataType colDataType   列数据类型
  • private List columnSpecStrings    列参数

     `user_num` VARCHAR(50) NOT NULL COMMENT '用户编号'
    
    public String toString() {
            return columnName+" "+colDataType+" "+PlainSelect.getStringList(columnSpecStrings, false, false);
        }
    

toString() 方法中令2个都为false,体现出来就是NOT NULL ....

Index 索引

  • private String type; 类型
  • private List columnsNames; 列名字列表 可联合索引
  • private String name; 索引名字

The type of this index: “PRIMARY KEY”, “UNIQUE”, “INDEX”

如: `"PRIMARY KEY (mycol2, mycol)) type = myisam";`

CreateTable

private Table table;
/*表参数列表*/
private List tableOptionsStrings;
/*列定义列表*/
private List columnDefinitions;
/*索引列表*/
private List indexes;

建表需要4个部分,分别是表,表参数列表,列定义列表,索引列表

 -- 日志表
 CREATE TABLE sys_log (
 `id` BIGINT NOT NULL PRIMARY KEY AUTO_INCRE MENT COMMENT '主键',
 `oper_name` VARCHAR(50) NOT NULL COMMENT '操作人编号',
 `oper_type` TINYINT UNSIGNED NOT NULL COMMENT '操作类型',
 `oper_note` VARCHAR(100) COMMENT '操作描述',
 `method` VARCHAR(150) DEFAULT NULL COMMENT '操作方法',
 `address` VARCHAR(50) DEFAU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值