1. 苏葳的备忘录首页
  2. 数据库

在Sybase 12.5中安装Java 函数

sybase java 函数Sybase不支持自定义函数,据说在15.0中版有支持,但单位现有系统顶多是12.5版的。用存储过程的output参数虽可,但较为麻烦。不如函数形式简单。幸好Sybase支持Java函数。尝试安装个Java函数的过程中,最悲剧的一点是,编译jar文件所用的Java版本只能是1.2.2版 。使用新版本编译可正常用installjava安装,但使用时出类格式错误java.lang.ClassFormatError,错误号10707。这点在sybase官方文档上有所提及。

安装流程:

一、打开sybase的java支持:sp_configure “enable java”,1,由于单位内系统内已经有大量java函数,故此项自然打开。

二、写java 类。例:

package sw;
public class cStrSplit{
 public static String StrSplit(String oristr,String deli,int pos){
  return oristr;
 }
}

三、编译:由于aix下已无jdk 1.2.2环境,故而在虚拟机上装了jdk 1.2.2编译。

javac cStrSplit.java

四、打包jar:

jar cf0 sw.jar cStrSplit.class

 

五、上传至sybase服务器aix下。

六、安装jar包:

installjava -f /tmp/sw.jar -Uxx -Sxx -Pxx

注意:win平台下可能为instjava。另有-new 及-update选项可供选择是新安装还是更新java包。另可能出警告提示,若包名不对的话,但仍可安装。

七、测试安装成功否:

在sql查询工具中:

select (new sw.cStrSplit())>>StrSplit("mmmm","aaa",1)

若成功未报错,则是安装成功。但我在测试中,此行输出应为mmmmm,但仅输出1个m,不知为何。

八、增加调用外壳(wrapper)

create function StrSplit(oristr varchar(2048),deli varchar(255),pos int)
returns varchar(2048)
returns null on null input
language java parameter style java
external name
'sw.cStrSplit.StrSplit(java.lang.String,java.lang.String,int)'
/* ### DEFNCOPY: END OF DEFINITION */

由原有java函数DDL修改而来,执行之。此步曾报过一个错误,方法在实例中无法执行之类,看java源码可知,由于不用select (new sw.cStrSplit())>>StrSplit方式调用而是直接调用,故源码中StrSplit函数应加static前缀。修改后即正常。

九、直接调用测试:

select StrSplit("mmmmnnnnn","aaa",1)

输出mmmmmnnnnn

正常。

注:经验证:installjava执行时可在客户端将文件安装至服务器,不需在服务器本地存储jar文件。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/299.html

发表评论

邮箱地址不会被公开。 必填项已用*标注