Closed ContyChen closed 1 year ago
lealone 可用的 sql 语句都在这里: http://lealone.org/grammar.html
这个是创建自定义函数的语句: CREATE ALIAS
CREATE ALIAS MY_SQRT FOR "java.lang.Math.sqrt"; 指向一个静态的 java 方法即可。
创建聚合函数复杂一点,用 CREATE AGGREGATE
先实现 org.lealone.db.api.Aggregate 接口
package my.aggregate;
public class Median implements org.lealone.db.api.Aggregate {
private final ArrayList<String> list = new ArrayList<>();
@Override
public void add(Object value) {
list.add(value.toString());
}
@Override
public Object getResult() {
return list.get(list.size() / 2);
}
@Override
public int getInternalType(int[] inputType) {
return Value.STRING;
}
@Override
public void init(Connection conn) {
// nothing to do
}
}
然后用 CREATE AGGREGATE median FOR "my.aggregate.Median" 最后使用自定义的聚合函数: select median(xxx) from yyy
用 java 实现的普通函数和聚合函数打成 jar 包后,放到 LEALONE_HOME/lib 目录 或者直接命令行启动 java -cp lealone.jar;my.jar org.lealone.main.Lealone
好的,感谢,我试一下
在函数中访问表的数据用JDBC吗?还是有其他好的实现方式
在函数中访问表的数据用JDBC吗?还是有其他好的实现方式
如果不想关心 lealone 的内部实现,只能用 JDBC 这种标准的接口。
lealone 的内部实现有一个数据库对象模型,一般是通过 LealoneDatabase.findDatabase 找到一个 Database 实例,然后用它能找到 Schema、Table、Index。只是这些都是内部实现,如果应用想在函数中直接使用这些类,lealone 是不保证在新的版本中保持 api 兼容的。
在函数中访问表的数据用JDBC吗?还是有其他好的实现方式
还有一个更简单的办法就是直接用 lealone orm 框架,也是用嵌入式的方式直接访问表。
如何在lealone数据库中创建自定义函数? 之前好像在微博讲过,现在找不到了,麻烦能给一个示例吗?