类 SqlUtils

java.lang.Object
com.gdxsoft.easyweb.datasource.SqlUtils

public class SqlUtils extends Object
  • 字段详细资料

    • MYSQL_RESERVED

      public static HashMap<String,Boolean> MYSQL_RESERVED
      MYSQL保留词
    • CHN_DBS

      public static final String[] CHN_DBS
      需要用中文排序的数据库类型
    • CHN_TEMPLATES

      public static final String[] CHN_TEMPLATES
      中文排序的模板列表,对应CHN_DBS
      MySQL utf8 的中文排序 convert([FIELD] using gbk)
      PostgreSQL utf8字段中文排序 convert_to([FIELD],'gb18030')
  • 构造器详细资料

    • SqlUtils

      public SqlUtils()
  • 方法详细资料

    • replaceSqlAtWithChar64

      public static String replaceSqlAtWithChar64(String value, String databaseType)
      将SQL语句中的@符号替换为各数据库的CHAR(64)表达式
      参数:
      value -
      databaseType -
      返回:
    • getTableNameBySqlComment

      public static String getTableNameBySqlComment(String sql)
      获取SQL语句中表名,例如 -- ewa_table_name 表名
      参数:
      sql -
      返回:
      表名
    • getAutoField

      public static String getAutoField(String sql)
      查找自增的sql的返回字段, 例如 -- auto MEMO_ID
      参数:
      sql -
      返回:
    • getJoinValueParameters

      public static String[] getJoinValueParameters(String sql)
      将表的列数据转换为拼接为字符串
      例如 -- ewa_join join_name, key_field_name
      参数:
      sql -
      返回:
      数组,0:join_name,1:key_field_name
    • getKVParameters

      public static String[] getKVParameters(String sql)
      将表的列数据转换为JSONObject
      例如: -- ewa_kv json_name, key_field_name, value_field_name
      用于转换为RequestValue的json对象
      参数:
      sql -
      返回:
      数组,0:json_name,1:key_field_name,2:value_field_name
    • getMemoParameters

      public static String[] getMemoParameters(String sql, String checkName)
      获取SQL语句中地备注(--)包含关键字的参数
      -- ewa_kv json_name, key_field_name, value_field_name
      -- ewa_join join_name, key_field_name
      参数:
      sql -
      checkName - 关键字
      返回:
      包含的参数
    • getMemoKeyWordLine

      public static String getMemoKeyWordLine(String sql, String checkName)
      获取SQL语句中地备注(--)信息包含关键字的行
      参数:
      sql -
      checkName - 关键字
      返回:
      含有关键字的行,去除了--
    • getSqlWithBlock

      public static String[] getSqlWithBlock(String sql)
      获取 SQL 的with部分和sql部分,用于分页查询
      参数:
      sql -
      返回:
      如果存在[withSql, selectSql],否则null
    • checkStartWord

      public static boolean checkStartWord(String sql, String word)
      判断 特定字符出现在非注释的SQL的0位置,多行的SQL只进行第一次判断
      参数:
      sql -
      word - 关键单词,例如SELECT
      返回:
    • checkIsSelect

      public static boolean checkIsSelect(String sql)
      检查是否为 select语句或标记为-- EWA_IS_SELECT
      参数:
      sql -
      返回:
    • isComparativeChanges

      public static boolean isComparativeChanges(String sql)
      是否比较更新前和更新后字段的变化, 方式:
      SQL 添加 -- COMPARATIVE_CHANGES
      参数:
      sql -
      返回:
    • removeSqlMuitiComment

      public static String removeSqlMuitiComment(String sql)
      删除sql 的多行备注
      参数:
      sql -
      返回:
    • checkHaveSql

      public static boolean checkHaveSql(String sql)
      去除SQL注释后/* 和 --,是否有可执行的sql
      参数:
      sql -
      返回:
    • ewaIsSelect

      public static boolean ewaIsSelect(String sql)
      强制执行为select 模式,解决with xxx as 语句后面的select
      标记为:-- EWA_IS_SELECT
      参数:
      sql -
      返回:
      true/false
    • isMySql

      public static boolean isMySql(String databaseType)
      MySQL or MariaDB
      参数:
      databaseType -
      返回:
    • isMySql

      public static boolean isMySql(DataConnection cnn)
    • isSqlServer

      public static boolean isSqlServer(String databaseType)
      SQL Server or Sybase
      参数:
      databaseType -
      返回:
    • isSqlServer

      public static boolean isSqlServer(DataConnection cnn)
    • isPostgreSql

      public static boolean isPostgreSql(String databaseType)
      PostgreSQL or KingbaseES/ Kingbase (人大金仓)
      参数:
      databaseType -
      返回:
    • isPostgreSql

      public static boolean isPostgreSql(DataConnection cnn)
    • isOracle

      public static boolean isOracle(String databaseType)
      Oracle or DM达梦
      参数:
      databaseType -
      返回:
    • isOracle

      public static boolean isOracle(DataConnection cnn)
    • isHsqlDb

      public static boolean isHsqlDb(String databaseType)
      HSQLDB or H2
      参数:
      databaseType -
      返回:
    • isHsqlDb

      public static boolean isHsqlDb(DataConnection cnn)
    • isSqlite

      public static boolean isSqlite(String databaseType)
      SQLite
      参数:
      databaseType -
      返回:
    • isSqlite

      public static boolean isSqlite(DataConnection cnn)
    • checkChnOrderByDatabase

      public static boolean checkChnOrderByDatabase(String databaseType)
      根据数据库类型判断是否采用中文排序表达式
      参数:
      databaseType - 数据库类
      返回:
      是否使用
    • checkChnOrderByType

      public static boolean checkChnOrderByType(String dataType)
      通过字段类型判断是否使用中文排序
      参数:
      dataType - 字段类型
      返回:
    • checkChnOrderByName

      public static boolean checkChnOrderByName(String fieldName)
      根据字段名称判断是字段是否使用中文排序
      参数:
      fieldName - 字段名称
      返回:
    • chnOrderTemplate

      public static String chnOrderTemplate(String databaseType)
      根据不同的数据库类型获取中文排序模板
      参数:
      databaseType - 数据库类型
      返回:
      排序模板
    • replaceChnOrder

      public static String replaceChnOrder(String databaseType, String fieldName, String dataType)
      根据数据库类型、字段名称、字段类型来判断并替换select 中文排序字段表达式
      参数:
      databaseType - 数据库类型
      fieldName - 字段名称
      dataType - 字段类型
      返回:
      排序表达式
    • replaceChnOrder

      public static String replaceChnOrder(String databaseType, String fieldName)
      根据数据库类型来判断,替换select 中文排序字段表达式
      参数:
      databaseType - 数据库类型
      fieldName - 字段名称
      返回:
      排序表达式
    • checkSqlSafety

      public static String checkSqlSafety(String sql)
      Check SQL for dangerous operations (DDL, destructive DML, file I/O, admin commands). MySQL DDL causes implicit commit, making transaction rollback ineffective — must be blocked before execution.
      参数:
      sql - raw SQL (supports multiple statements separated by ;)
      返回:
      null if safe, or error message string if dangerous