对象查询语言OQL简明教程
1. OQL语法
OQL语法如下:
SELECT * FROM [ INSTANCEOF ] <class_name> [ WHERE <filter-expression>]
2. 语法各子句说明
select部分
SELECT toString(x),
x.value,
x.@usedHeapSize,
toHex(x.@objectAddress),
outbounds(x)
FROM java.lang.Integer x
其中
toString
和outbounds
是内置的方法:
toHex(num) | 十六进制显示数值 |
toString(object) | 显示对象的字符串表示 |
dominators(object) | 显示该对象立即支配的所有对象 |
outbounds(object) | 显示对象引用的所有对象 |
inbounds(object) | 显示被对象引用的所有对象 |
classof(object) | 显示对象的java.lang.Class |
dominatorof(object) | 显示立即支配该对象的对象 |
x.value
表示访问对象的某个字段。x.@usedHeapSize
表示访问对象的一些内置属性,常见属性如下:
x.@objectId | 对象Id |
x.@objectAddress | 对象地址 |
x.@class | 对象的java.lang.Class表示 |
x.@usedHeapSize | |
x.@retainedHeapSize | |
x.@classLoaderId | 对象类加载器Id,仅当x是java.lang.Class时才有该属性 |
x.@length | 数组长度,仅当x是数组时才有该属性 |
完整的列表属性请参见Eclipse文档
from部分
from表示查询的数据源,常见from数据源如下
SELECT * FROM java.lang.Integer | 指定是java.lang.Integer类型的对象 |
SELECT * FROM INSTANCEOF java.util.AbstractCollection | 指定是AbastractionCollection实例的对象 |
SELECT * FROM OBJECTS 0xcafebabe | 以某个特定地址的对象作为数据源 |
SELECT v, v.@length FROM OBJECTS ( SELECT OBJECTS s.value FROM java.lang.String s ) v | 以子查询结果作为数据源 |
where部分
where用于数据过滤,它支持如下符号:
>=, <=, >, <, [ NOT ] LIKE, [ NOT ] IN, IMPLEMENTS