添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
@Test
    void changeTable() throws JSQLParserException {
        String xxx = " AUTO_INCREMENT ";
        CreateTable createTable = (CreateTable) CCJSqlParserUtil.parse(" CREATE TABLE `t_student` (\n" +
                "  `student_id` int(10) unsigned NOT NULL  COMMENT '学生id',\n" +
                "  `student_name` varchar(60) DEFAULT NULL,\n" +
                "  `student_password` varchar(60) DEFAULT NULL,\n" +
                "  `student_id_card` varchar(255) DEFAULT NULL,\n" +
                "  `sex` int(10) DEFAULT '0',\n" +
                "  `is_deleted` tinyint(1) DEFAULT NULL,\n" +
                "  `gmt_create` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,\n" +
                "  `gmt_modified` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,\n" +
                "  PRIMARY KEY (`student_id`)\n" +
                ") ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 ");
        Index  index = createTable.getIndexes().get(0);
        // System.out.println(index.getColumnWithParams().get(0));
        // System.out.println(index.getType());
        // System.out.println(index.getColumnsNames());
        // System.out.println(index.getIndexSpec());
        // System.out.println(index.getUsing());
        // System.out.println(index.getNameParts());
        // System.out.println(index.getName());
        System.out.println("indexName :  "+index.getColumnsNames().get(0));
        String indexName = index.getColumnsNames().get(0);
        ColumnDefinition df1 = createTable.getColumnDefinitions().stream()
                .peek(df12 -> System.out.println(df12.getColumnName()))
                .filter(df -> df.getColumnName().equalsIgnoreCase(indexName))
                .findFirst().get();
        // System.out.println(df1.getColDataType().getArgumentsStringList());
        System.out.println(df1.getColumnSpecs());
        System.out.println(df1.getColumnName());
        System.out.println(df1.getColDataType());
        ArrayList spec = new ArrayList<String>();
        // spec.add("auto_increment");
        // spec.addAll(df1.getColumnSpecs());
        for (String param: df1.getColumnSpecs()) {
            spec.add(param);
            if (param.equalsIgnoreCase("null")) {
                spec.add(" auto_increment ");
        df1.setColumnSpecs(spec);
        // df1.getColumnSpecs().add("auto_increment");
        System.out.println("--------------------------------------------------------");
        System.out.println(createTable);
                                    JSqlParse的总体代码量不大,结构也很简单,其项目整体结构图如下:包含表达式相关的类和接口,可以简单看做sql解析后的组成对象之一。如果需要对sql进行一些更改变换,基本都会涉及到这个包。JSqlParse最核心的包,这个包里的类实现了sql的解析,进而我们才可以对解析后的sql(“java类”)做各种自定义处理。虽然这个包是最核心的包,但如果纯粹从使用角度上来说可以不必太在意它,除非我们想深入了解sql解析的过程。
npm i
npm run dev
// 构建支持浏览器环境的代码文件,浏览器端直接引用构建出来的 browser/sql-parser.min.js 文件即可,browser/demo.html 为调用示例
yarn browser
npm run browser
解析结果如下:
        "type": "create_table",
        "name": "tbl1",
        "columns": [
                "type": "column",
                "name": "id",
                                    最近遇到一个问题,应用层提供的SQL语句中有这样的语句,在MySQL中执行肯定是没问题的,但是后台数据库切换到了HBase,使用apache phoenix 提供的JDBC驱动访问时却报错了,按照phoenix官方的文档,CAST函数是支持,但现实就是报错过不了,应该是我使用的phoenix版本问题,应该是个BUG,暂时无法通过升级版本解决。解决方案也不复杂就是用phoenix的Native函数函数来代替,将替换为。那么问题来了,如果让应用层来替换这事很方便,但是我们希望数据存储对应用层是透明的,应用层不需
intercept:在拦截时,需要执行的业务逻辑
plugin:是否代理Executor、ParameterHandler、ResultSetHandler、StatementHandler对象中的某个或某些,
如果代理,则返回相应对象的代理对象,否则返回原对象。根据类上Intercepts注解决定是否返回代理对象。
setProp
                                    JSqlParser是一个Java库,用于解析SQL语句并生成一个抽象语法树(AST,Abstract Syntax Tree),使得开发者能够在运行时对SQL语句进行解析、修改和分析。它支持多种SQL方言,包括但不限于MySQL、PostgreSQL、Oracle、SQL Server等。
                                    / 修改姓名 ColDataType varchar = new ColDataType("VARCHAR");AlterExpression . ColumnDataType name = new AlterExpression . ColumnDataType("name" , false , varchar , Collections . singletonList("COMMENT '道号'"));
                                    JSqlParser是一个强大的Java库,用于解析和操作SQL语句。本文将深入探讨JSqlParser的使用方法和功能特性,详细介绍如何利用JSqlParser解析、修改和生成SQL语句。我们将讨论JSqlParser的基本用法、支持的SQL语法和常见应用场景,以及如何结合JSqlParser实现自定义的SQL操作和查询优化。
                                    源码地址  https://github.com/JSQLParser/JSqlParser源码分析ColDataType 列数据类型有2个属性:
String dataType 标识数据类型
List argumentsStringList 类型参数
例如  `user_num` VARCHAR(50) NOT NULL COMMENT '用户编号'
中的  VARCHAR(50) NOT NUL