本文为iihero原创,如若转载,请务必注明出处。
或者直接使用命令行:
D:/ASE150>instjava-D iihero -S SEANLAPTOP
-fE:/MyDocument/MYBOOKS/ASE/code/JavaSQL/Point.jar-update -j"Point" -Usa-P
其中-D指定目标数据库,-S指定服务名,-f指定已经编译好的java包,-j指定该包在数据库中的包名,-U指定连接数据库的用户名,-P指定密码。
一、面向对象应用的实际效果
D:/ASE150>isql-Uspring -Pspring1
1> use iihero
2> go
创建含对象类型Point列的表:
1> createtable testpoint(id int primary key, p Point)
2> go
使用对象特性插入数据并查询:
1> insertinto testpoint values (1, new Point(1.0, 1.0))
2> insertinto testpoint values (2, new Point(5.0, 4.0))
3> insertinto testpoint values (3, new Point(6.0, 13.0))
4> go
(1 row affected)
(1 row affected)
(1 row affected)
1> select *from testpoint
2> go
id p
-------------------------------------------------------------
1 (1.0, 1.0)
2 (5.0, 4.0)
3 (6.0, 13.0)
(3 rowsaffected)
直接取属性值:
1> select id,p>>_x, p>>_y from testpoint
2> go
id
----------- ------------------------------------------------------
1 1.000000 1.000000
2 5.000000 4.000000
3 6.000000 13.000000
(3 rowsaffected)
查询两点间的距离:
1> selecta.id, b.id, Point.distance(a.p, b.p) from testpoint a, testpoint b whe
re a.id
2> go
id id
----------- --------------------------------------
1 2 5.000000
1 3 13.000000
2 3 9.055385
(3 rowsaffected)
以距离作为条件查询点(查询两点间距离小于6.0的点对):
1> selecta.id, b.id from testpoint a, testpoint b where Point.distance(a.p, b.p
) b.id
2> go
id id
----------- -----------
2 1
(1 row affected)
二、总结
在到ASE数据库服务器内部,它对Java类作了如下映射:
l select出对象列的值,就是Java对象的toString()值。
l 静态方法可以直接在select语句里当作函数进行调用,如上例中的Point.distance()方法
l 直接可以取类的成员值,如果那个成员是公有成员,并且有相应的SQL类型映射,如上例中的p>>_x,p>>_y,使用”>>”操作符来提取。
按照上述原理,用户完全使用内置的Java包实现非常复杂的逻辑,然后在SQL语句中直接加以利用。尤其是那种接近于面向对象数据库的应用。
总之,使用内置Java支持对对象类型的存取,是一种很直观易用的方法,也便于用户进行扩充。从这个角度来看,Sybase ASE也可以算是支持面向对象的数据存取了。