首页 > 开发 > Java > 正文

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

2024-07-21 02:08:06
字体:
来源:转载
供稿:网友

ase12.5数据库内嵌java开发指南


作者:翁彦

时间:2004年4月

平台

windows 2000 server

ase 12.5 developer edtion for nt

声明

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

[email protected]


    用过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)

 

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

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表