GBase 8s 编写使用UDR(C/Java) 转发liaosnet

GBase 8s数据库支持C和JAVA写的用户自定义例程(UDR),以扩展用户对数据库的操作的功能。
以下我们分别以简单的例子介绍C UDR和Java UDR。

作者: liaosnet 时间: 2020-05-16 分类: 默认分类,java开发,存储过程 阅读:944 次

C UDR

C UDR使用C语言为基础开发。
参考两个文档:《用户定义例程和数据类型开发者指南》和《DataBlade开发者工具用户指南》

1, 编写代码,示例使用简单的Hello.c
#include ` `char` `*Hello(``char` `*message )``{``  ``return``(message);``}` `main()``{``  ``char` `*message = ``"Hello World!"``;``  ``printf``(``"%s\n"``, Hello(message));``}
2, 编译成共享库Hello.so
gcc` `-c -fPIC -o Hello.o Hello.c` `gcc` `-shared -o Hello.so Hello.o
3, 将共享库放置于数据库服务器上

比如,放到 G B A S E D B T D I R / u d r 目 录 下 , 则 H e l l o . s o 的 位 置 为 GBASEDBTDIR/udr 目录下,则Hello.so的位置为 GBASEDBTDIR/udrHello.soGBASEDBTDIR/udr/Hello.so

4, 在需要该函数的库里创建相应的函数CDURHello
create` `function` `CUDRHello(``varchar``(255))``returns` `varchar``(254)``with` `(``not` `variant)``external ``name` `'$GBASEDBTDIR/udr/Hello.so(Hello)'``language c;
5, 执行CUDRHello函数
select` `cudrhello(``'C UDR返回天津南大通用'``) ``from` `dual;

返回结果: C UDR返回天津南大通用

6, 函数删除

对于C UDR,不再需要该函数了,需要先在数据库删除函数,然后删除对应的共享库。

drop` `function` `CUDRHello;

Java UDR

Java UDR实际的功能与C UDR一致
但需要额外配置SBSPACE空间。

0, 创建sbspace空间
onspaces -c -S sbspace01 -p ``/data/gbase/sbspace01` `-o 0 -s 1024000

更新ONCONFIG配置文件中SBSPACENAME为sbspace01

SBSPACENAME sbspace01
1, 编写代码,示例使用简单的Hello.java
public` `class` `Hello {` `  ``public` `static` `void` `main(String[] args){` `    ``System.out.println(Hello(``"Java UDR: Hello World!"``));` `  ``}` `  ``public` `static` `String Hello(String str){` `    ``return` `str;` `  ``}``}
2, 使用JDK1.6(注意,必须使用1.6)编译,并打包成jar文件
javac Hello.java` `jar -cf Hello.jar Hello.class

3, 将共享库放置于数据库服务器上

比如,放到 G B A S E D B T D I R / u d r 目 录 下 , 则 H e l l o . j a r 的 位 置 为 GBASEDBTDIR/udr 目录下,则Hello.jar的位置为 GBASEDBTDIR/udrHello.jarGBASEDBTDIR/udr/Hello.jar

4, 设置数据库的JVP环境

ONCONFIG配置文件涉及到JVP的相关参数
1)VPCLASS开启jvp,用于处理Java UDR,默认不开启,取消前面的注释符’#’

VPCLASS jvp,num=1

2)JVPARGS增加 -Dfile.encoding=UTF-8(根据实际需要增加与否,即直接java执行的参数)

JVPARGS -Dcom.ibm.tools.attach.enable=no;-Dfile.encoding=GBK

3)JVPCLASSPATH增加依赖包的路径(如果函数需要额外的依赖包的话)
如:依赖 $GBASEDBTDIR/extend/krakatoa/commons-codec-1.9.jar

JVPCLASSPATH $GBASEDBTDIR/extend/krakatoa/krakatoa.jar:$GBASEDBTDIR/extend/krakatoa/jdbc.jar:$GBASEDBTDIR/extend/krakatoa/commons-codec-1.9.jar

重启数据库生效,通过onstat -g glo确认已经增加的jvp。

5, 在需要该函数的库里注册jar
execute` `procedure` `install_jar(``"file:$GBASEDBTDIR/udr/Hello.jar"``, ``"JUDRHello"``);

install_jar的参数:jar所在的绝对路径,安装后的名称。

6, 创建相应的例程
create` `function` `JUDRHello(``varchar``(255))``returns` `varchar``(254)``with` `(``not` `variant)``external ``name` `'JUDRHello:Hello.Hello(java.lang.String)'``language java;

其中function中的 Hello(varchar(255))应与Java中的定义相对应;
external name 为java中的名称: 安装后的名称:java类名.方法

7, 执行JUDRHello函数
select` `judrhello(``'Java UDR返回天津南大通用'``) ``from` `dual;

返回结果: Java UDR返回天津南大通用

8, 修改Java UDR例程的操作

修改指定注册名称的对应的jar新路径或者名称
如:JUDRHello使用新的jar包替换掉之前的

execute` `procedure` `replace_jar(``"file:$GBASEDBTDIR/udr/Hello-1.0.jar"``, ``"JUDRHello"``);
9,删除Java UDR例程的操作

删除对应的函数

drop` `function` `judrhello;

移除对应的注册的jar

execute` `procedure` `remove_jar(``"JUDRHello"``);

只需要注册的名称。

标签: gbase 8s, udr, GBase, C UDR, Java UDR, 用户自定义例程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值