ASE12.5数据库内嵌JAVA开发指南

发表于:2007-07-02来源:作者:点击数: 标签:
ASE12.5 数据库 内嵌JAVA 开发 指南 作者:翁彦 时间:2004年4月 平台 Windows 2000 Server ASE 12.5 developer edtion for NT 声明 欢迎转载,请保留本申明信息 enhydraboy@yahoo.com.cn 用过ORACLE 8i的朋友,知道ORACLE 8i中,可以通过loadjava命令将java

ASE12.5数据库内嵌JAVA开发指南


作者:翁彦

时间:2004年4月

平台

Windows 2000 Server

ASE 12.5 developer edtion for NT

声明

欢迎转载,请保留本申明信息

enhydraboy@yahoo.com.cn


    用过ORACLE 8i的朋友,知道ORACLE 8i中,可以通过loadjava命令将java对象内嵌在数据库里面。这样可以使得PL/SQL程序可以调用这些JAVA对象。这个技术的好处在于:

1 扩展了PL/SQL程序的功能,我们知道,PL/SQL是扩展了SQL命令,可以进行逻辑运算操作,但是有了java语言的支持,那可以做的事情将更多

2 可以为我们提供一种新型的数据类型。现在的RDBMS都支持自定义类型,和对象类型。但是自定义的类型只和某种数据库相关,在不同数据库间进行迁移的时候,这些数据类型显然是不能迁移的(你必须要自己在新的数据库中去实现这部分,也许你该改动的代码将会是不可预计的)。这使得我们对于想使用对象数据类型不得不顾虑重重,甚至放弃它。而JAVA可以帮助我们彻底打消顾虑。

    下面,我就简单地谈一谈SYBASE 12.5中是如何应用的。

1 首先,要先允许数据库支持JAVA的特性。

  sp_configure “enable java”,1


1> sp_configure "enable java",1

2> go

 Parameter Name                 Default     Memory Used Config Value

         Run Value   Unit                 Type

 ------------------------------ ----------- ----------- ------------

        ----------- -------------------- ----------

 enable java                              0           0           1

                   0 switch               static

 

(1 row affected)

Configuration option changed. Since the option is static, Adaptive Server must

be rebooted in order for the change to take effect.

Changing the value of @#enable java@# to @#1@# increases the amount of memory ASE

uses by 6482 K.

(return status = 0)


2 重新启动Sybase数据库。NT下面,可以通过控制面板->管理工具->服务来重启。

3 好了,下面,我们来简单地开发一个JAVA程序,然后看看sybase的T-SQL是如何调用的。

java程序

package sam;

 

public class HelloWorld

{

public String  Hello()

{

       return "HelloWorld";

}

 

}

4 编译并且打包上面这个java程序。

javac sam/*.java

jar cf0 sam.jar sam\*.class

5 安装java包到数据库中,用sybase提供的instjava程序,这个程序会随着sybase安装的时候,一起安装的。要说明的是,NT和unix命令名称不一样。unix下是installjava ,Windows NT下是instjava 。 

instjava -f "E:\工作目录 ybase\java am.jar" -new -j -S sam -U sa -P -D Northwind

6 在Sybase的Transaction-SQL中调用Hello方法

1> select (new sam.HelloWorld())>>Hello()

2> go

 

 --------------------------------------------------

 HelloWorld

我们可以看到,sybase基本采用了类似java语法,因此,java程序员应该很容易使用。

7 下面,我再谈谈第二个特性(java对象类型)的开发应用。

package sam;

 

public class Address implements java.io.Serializable

{

private String varCity;

private String varCountry;

private String varZip;

private String varHome;

 

public Address(String mCity,String mCountry,String mZip,String mHome)

{

    varCity=mCity;

    varCountry=mCountry;

    varZip=mZip ;      

    varHome=mHome;

}

 

public String City()

{

   return varCity; 

}

 

public String Country()

{

   return varCountry;  

}

 

public String HomeAddress()

{

   return varHome;     

}

 

public String Zip()

{

   return varZip;  

}

 

public void ModifyAddress(String mCity,String mCountry,String mZip,String mHome)

{

    varCity=mCity;

    varCountry=mCountry;

    varZip=mZip ;      

    varHome=mHome;

      

}

 

}

8 编译,打包,安装后。现在,我们就可以直接使用这个java对象类型。

建一个表,数据库字段类型是一个java类。

注意:可以作为数据库字段类型的java类,必须implements了java.io.serializable接口。

1> create table emps (

2>         empno int,

3>         name varchar(30),

4>         addr sam.Address default new sam.Address

5>             (@#Not known@#, @#@#,@#@#,@#@#)

6> )

7> go

1> alter table emps add constraint pk_emps primary key(empno)

2> go

操作并使用java类型的字段。

1> insert into emps(empno,name) values(1,@#TOM@#)

2> go

(1 row affected)

1> insert into emps values(2,@#BOB@#,

2> new sam.Address(@#Shanghai@#,@#china@#,@#200132@#,@#1169,nanjin road@#))

3> go

(1 row affected)

 

1> begin

2> declare @A sam.Address

3> select @A=addr from emps where empno=2

4> select @A>>Country(),@A>>City(),@A>>HomeAddress(),@A>>Zip()

5> end

6> go

 

--------------------------------------------------

         --------------------------------------------------

         --------------------------------------------------

         --------------------------------------------------

 china

         Shanghai

         1169,nanjin road

         200132

 

(1 row affected)

 

    通过以上简单的例子,希望能够对大家实际的系统开发有所帮助。

 

原文转自:http://www.ltesting.net