前言

DBeaver 是一个免费开源的通用数据库工具,其中22版本的推出了一个虚拟列、虚拟唯一键、虚拟外键、虚拟引用。真是一大神器,本篇就是简单唠叨一下”虚拟列“,”虚拟外键“的简单使用。

使用场景

虚拟列(virtual column )

虚拟列可以使用表达式在数据查看器中看到结果值,不能用于sql查询,因为它不在数据库中。
表达式目前使用的是 jexl3引擎进行解析,所以我们可以尽情的写表达式去处理我们的列转为需要输出的列。
可以用在运维场景:数据项翻译(1男2女;0未审核1一审2二审3退回4通过…),同一张表提供数据列的指标计算(销售价格÷利润=市盈率)

虚拟外键(virtual foreign key)

虚拟外键的使用我觉得就是为 ER 图查看器准备的,当定义完虚拟外键后,就可以看到 ER 图查看器中关联其他表的 ER 图,基于已经存在的数据库,想整理一个 ER 图,那可比 PDMan 方便多了

DBeaver的虚拟主键和虚拟外键这些都是为了丰富自身产品的功能引入的,都是在功能上使用的(ER图、表格展示数据、构造SQL脚本…),与数据库无关。举个例子:如查询一个无主键的表后在展示的数据列表修改一条数据,原本该软件构造的SQL根据表没有主键所以where语句后需要跟上全部的字段,在设置虚拟主键后where条件就只有虚拟主键的那个字段作为条件。

虚拟列可用方法概览

jexl操作符

一种是默认的 jexl3 操作符号,其使用方式可以直接是 操作符, 也可以使用对应的方法进行调用。

操作符描述
布尔值and可以使用常用的&&运算符以及单词and,例如 cond1 and cond2cond1 && cond2是等价的。注意这个运算符不能重载
布尔值or可以使用常用的||运算符以及单词or,例如 cond1 or cond2cond1 || cond2是等价的。注意这个运算符不能重载
布尔值not可以使用常用的!运算符以及单词not,例如 !cond1not cond1是等价的。注意这个运算符不能重载
按位and&使用 通常的运算符,例如33 & 40010 0001 & 0000 0100 = 0。
按位or|使用 通常的运算符,例如33 | 40010 0001 | 0000 0100 = 0010 0101 = 37。
按位xor^使用 通常的运算符,33 ^ 4例如 0010 0001 ^ 0000 0100 = 0010 0100 = 37。
按位complement~使用 通常的运算符,例如~33,~0010 0001 = 1101 1110 = -34。
三元条件?:可以使用通常的三元条件运算符condition ? if_true : if_false运算符以及value ?: if_false返回value如果其评估已定义、非空和非假的缩写,例如 val1 ? val1 : val2val1 ?: val2 是等价的。**注意:**条件将评估为何false时引用未定义的变量或null所有JexlEngine 标志组合。这允许显式语法宽松,并在所有情况下以相同方式处理条件“if undefined or null or false”。注意这个运算符不能重载
空合并运算符??空合并运算符返回其第一个操作数的结果(如果它已定义且不为空)。当xy为 null 或未定义时, x ?? 'unknown or null x'计算 'unknown or null x' y ?? "default"结果为 "default"。当var x = 42和 时 var y = "forty-two"x??"other" 计算为42y??"other"计算为"forty-two"。**注意:**此运算符的行为不像三元条件,因为它不会将第一个参数强制为布尔值来评估条件。当var x = false和 时 var y = 0x??true 计算为falsey??1计算为0。注意这个运算符不能重载
==可以使用常用的==运算符和缩写eq。例如 val1 == val2val1 eq val2是等价的。null永远只等于 null,也就是说,如果将 null 与任何非 null 值进行比较,则结果为 false。相等使用javaequals方法
!=可以使用常用的!=运算符和缩写ne。例如 val1 != val2val1 ne val2是等价的。
小于<可以使用常用的<运算符和缩写lt。例如 val1 < val2val1 lt val2是等价的。
小于或等于<=可以使用常用的<=运算符和缩写le。例如 val1 <= val2val1 le val2是等价的。
大于>可以使用常用的>运算符和缩写gt。例如 val1 > val2val1 gt val2是等价的。
大于或等于可以使用常用的>=运算符和缩写ge。例如 val1 >= val2val1 ge val2是等价的。
在或匹配=~语法上受 Perl 启发的=~运算符可用于检查 a 是否string匹配正则表达式(表示为 Java String 或 java.util.regex.Pattern)。例如 "abcdef" =~ "abc.*退货true。它还检查任何集合、集合或映射(在键上)是否包含值;在这种情况下,它表现为“in”运算符。请注意,公开公共“包含”方法的数组和用户类将允许它们的实例充当此运算符的右侧操作数。 "a" =~ ["a","b","c","d","e",f"]回报true
不在或不匹配!~语法上受 Perl 启发的!~运算符可用于检查 a 是否string与正则表达式(表示为 Java String 或 java.util.regex.Pattern)不匹配。例如 "abcdef" !~ "abc.*退货false。它还会检查任何集合、集合或映射(在键上)是否不包含值;在这种情况下,它表现为“不在”运算符。请注意,公开公共“包含”方法的数组和用户类将允许它们的实例充当此运算符的右侧操作数。 "a" !~ ["a","b","c","d","e",f"]回报true
以…开始=^=^运算符是“startsWith”方法的简写。例如,"abcdef" =^ "abc"返回true. 请注意,通过 duck-typing,公开公共“startsWith”方法的用户类将允许其实例充当此运算符的左侧操作数。
不是开始于!^这是“startsWith”运算符的否定。 a !^ "abc"相当于!(a =^ "abc")
以…结束=$=$运算符是“endsWith”方法的简写。例如,"abcdef" =$ "def"返回true. 请注意,通过 duck-typing,公开“endsWith”方法的用户类将允许其实例充当此运算符的左侧操作数。
不结束于!$这是“结尾为”运算符的否定。 a !$ "abc"相当于!(a =$ "abc")
添加++使用 通常的运算符。例如 val1 + val2
减法--使用 通常的运算符。例如 val1 - val2
乘法**使用 通常的运算符。例如 val1 * val2
除法/使用通常的/运算符,或者可以使用div运算符。例如 val1 / val2val1 div val2
取模(或余数)%%使用运算符 。另一种选择是mod 运营商。例如 5 mod 2给出 1 等同于5 % 2
复合运算符一些运算符以副作用的形式存在。它们的默认行为是执行运算符并将结果分配给左侧。例如a += 2相当于a = a + 2 运算符列表是:+=-=*=/=%=&=|=^=
否定使用 一元运算符-。它更改其数字参数的符号。例如-12-(a * b)
提升字段类型+使用 一元运算符。它执行整数提升,这意味着 byte、short、char 参数将因此提升为整数。例如 +12-(a * b)
empty一元empty运算符的行为与相应的函数完全相同empty()。例如empty argempty(arg)是等价的
size一元size运算符的行为与相应的函数完全相同size()。例如size [1,2,3]size([1,2,3])是等价的

String常用操作方法

String的常用操作方法,只能直接进行调用: 比如字段 ID 是字符串类型,使用的时候可以直接使用如下方法: ID.length()ID.charAt(4)ID.equals('name')

方法名方法含义
length求字符串的长度
charAt(int index)求字符串某一位置字符
substring(int beginIndex) 提取子串
compareTo(String anotherString)字符串比较
compareToIgnore(String anotherString)字符串比较-忽略大小写
equals(Object anotherObject)比较当前字符串和参数字符串
equalsIgnoreCase(String anotherString)比较-忽略大小写
concat(String str)字符串连接,等价于“+
indexOf(int ch/String str)查找当前字符串中字符或子串
indexOf(int ch/String str, int fromIndex)从fromIndex位置向后查找当前字符串中字符或子串
lastIndexOf(int ch/String str)从后向前查找当前字符串中字符或子串
lastIndexOf(int ch/String str, int fromIndex)从fromIndex位置向前查找当前字符串中字符或子串
toLowerCase()当前字符串中所有字符转换成小写后的新串
toUpperCase()将当前字符串中所有字符转换成大写后的新串
replace(char oldChar, char newChar)用字符newChar替换当前字符串中所有的oldChar字符
replaceFirst(String regex, String replacement)用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串
replaceAll(String regex, String replacement)用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串
trim忽略字符串前导和尾部的空格
isEmpty()判断字符串是否为空
contains(String str)判断是否包含指定的字符串
startsWith(String prefix)此字符串是否以指定的子串开始
endsWith(String prefix)此字符串是否以指定的子串结束
GitHub 加速计划 / db / dbeaver
38.73 K
3.35 K
下载
DBeaver 是一个通用的数据库管理工具,支持跨平台使用。* 支持多种数据库类型,如 MySQL、PostgreSQL、MongoDB 等;提供 SQL 编辑、查询、调试等功能;支持数据迁移和比较。* 特点:免费开源;界面友好;功能丰富。
最近提交(Master分支:2 个月前 )
4c33020d 2 个月前
83d4cee8 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐