4.7.?UXDB对JDBC API的扩展

4.7.1. 访问扩展
4.7.2. 几何数据类型
4.7.3. 大对象

UXDB是一种可扩展的数据库系统。 可以向数据库后端里增加自己的函数,这些函数可以供查询调用,甚至可以增加自己的数据类型。因为这些是UXDB特有的功能,因此澳门游戏平台注册网站在Java 里面支持它们,同时还带着一套扩展的API。在标准驱动的核心里实际上使用了这些扩展来实现大对象等等。

4.7.1.?访问扩展

要获得某些扩展,需要使用org.UXDB.UXConnection类里的一些额外的方法,这时,需要转换Driver.getConnection()的返回值。比如:

Connection db = Driver.getConnection(url, username, password);
// ...
Fastpath fp = ((org.UXDB.UXConnection)db).getFastpathAPI();

4.7.1.1.?类org.UXDB.UXConnection

public class UXConnection

这些是用于获取UXDB的扩展的额外的方法:

  • public Fastpath getFastpathAPI() throws SQLException

    这个方法为当前连接返回 Fastpath API。主要用于大对象API。

    • 使用这个方法的最好方式是:

      import org.UXDB.fastpath.*;
      ...
      Fastpath fp = ((org.UXDB.UXConnection)myconn).getFastpathAPI();

      这里的myconn是一个已经打开的与UXDB的Connection。

    • 返回值

      一个可以用来访问UXDB后端里面的函数的Fastpath对象。

    • 异常

      在第一次初始化的时候Fastpath抛出的SQLException。

  • public LargeObjectManager getLargeObjectAPI() throws SQLException

    这个方法为当前连接返回一个大对象API。

    • 使用这个方法的最好方式是:

      import org.UXDB.largeobject.*;
      ...
      LargeObjectManager lo = ((org.UXDB.UXConnection)myconn).getLargeObjectAPI();

      这里的myconn是一个已经打开的与UXDB的Connection。

    • 返回值

      实现大对象API的LargeObject对象。

    • 异常

      在第一次初始化的时候LargeObject抛出的SQLException。

  • public void addDataType(String type, String name)

    这个方法允许客户端代码为UXDB中比较独特的数据类型加一个句柄。 通常,驱动器不认识的数据类型是由ResultSet.getObject()以一个UXobject实例的形式返回的。 这个方法允许写一个扩展UXobject的类,然后告诉驱动该类型名字,以及要使用的类名字。 这个方法的缺点是,每次建立新连接的时候,都要调用这个方法。

    • 使用这个方法的最好方式是:

       ...
      ((org.UXDB.UXConnection)myconn).addDataType("mytype","my.class.name");
       ...

      这里的myconn是一个已经打开的与UXDB的Connection。做控制的类必须扩展org.UXDB.util.UXobject。

4.7.1.2.?类org.UXDB.Fastpath

public class Fastpath extends Object

java.lang.Object
   |
   +----org.UXDB.fastpath.Fastpath

Fastpath是一套存在于libpqC接口里的API,并且这个接口允许客户机器执行后端数据库的函数。大多数客户端代码不需要使用这个方法,但是还是提供这个方法, 因为大对象 API使用它。

要使用这个扩展,需要输入UXDB.fastpath包,如下:

import org.UXDB.fastpath.*;

然后在代码里,需要获取一个FastPath对象:

Fastpath fp = ((org.UXDB.UXConnection)conn).getFastpathAPI();

这样将返回一个实例,该实例与发出命令的数据库连接相关联。 必须把Connection转换成org.UXDB.UXConnection,因为getFastpathAPI()是澳门游戏平台注册网站自己的方法之一,而不是JDBC的。 一旦拥有了Fastpath实例,就可以使用fastpath()方法执行一个后端函数。

  • public Object fastpath(int fnid,boolean resulttype,FastpathArg args[]) throws SQLException

    向UXDB后端发送一个函数调用。

    • 参数

      表?4.2.?public Object fastpath 参数说明

      参数说明
      fnid函数id
      resulttype如果结果为整数则为true,如果为其它则为false
      args传递给fastpath的FastpathArguments

    • 返回值

      如果没有数据返回空(null),如果结果为整数返回一个Integer,否则返回byte[]。

  • public Object fastpath(String name,boolean resulttype,FastpathArg args[]) throws SQLException

    通过名字向UXDB后端发送一个函数调用。

    注意

    函数名到函数id的映射必须存在, 通常先调用addfunction()。 这是调用函数的优选方法,因为函数id在不同版本的后端里是会/可能改变的。 这个方法工作的例子,可以参阅org.UXDB.LargeObject。

    • 参数

      表?4.3.?public Object fastpath 参数说明

      参数说明
      name函数名称
      resulttype如果结果为整数则为true,如果为其它则为false
      args传递给fastpath的参数FastpathArguments

    • 返回值

      如果没有数据返回空(null),如果结果为整数返回一个Integer,否则返回byte[]。

  • public int getInteger(String name,FastpathArg args[]) throws SQLException

    • 参数

      表?4.4.?public int getInteger 参数说明

      参数说明
      name函数名称
      args函数参数

    • 返回值

      Integer(整数)

    • 异常

      如果发生了数据库访问错误或者没有结果抛出SQLException。

  • public byte[] getData(String name,FastpathArg args[]) throws SQLException

    这个便利方法假设返回值是二进制数据。

    • 参数

      表?4.5.?public byte[] getData 参数说明

      参数说明
      name函数名称
      args函数参数

    • 返回值

      包含结果的byte[]数组。

    • 异常

      如果发生了数据库访问错误或者没有结果抛出SQLException。

  • public void addFunction(String name,int fnid)

    这个方法向澳门游戏平台注册网站的(函数)检索表里增加一个函数。 用户代码应该使用addFunctions方法, 因为这个方法基于一个查询, 而不是OID硬代码。澳门游戏平台注册网站不保证一个函数的OID是静态的, 甚至运行在不同服务器的同版本的数据库也不能保证是静态的。

  • public void addFunctions(ResultSet rs) throws SQLException

    这个方法接收一个包含两个字段的ResultSet。 字段1包含函数名,字段2是OID。它读取整个ResultSet,把值装载入函数表。

    注意

    调用完这个方法后记得用close()关闭 ResultSet。

    关于函数名查找实现的信息:UXDB在UX_proc表里存储函数id和它们对应的名称,在查找时不是从该表里查询每个所需函数的名称,而是使用了一个Hashtable (散列表)。 同样,只有需要的函数的名称才放到这个表里,以保证连接速度。

    org.UXDB.LargeObject 类在启动时执行一个查询,并且把返回的ResultSet传递给这里提到的addFunctions()方法。 一旦这些工作完成,LargeObjectAPI就用名称引用函数。

    目前可以手动的把它们转换成OID,但随着开发的进行这些可能被修改,所以这样做是防止未来可能出现的任何不受保障的手段。

    又见:.LargeObjectManager

  • public int getID(String name) throws SQLException

    这个方法返回与函数名关联的函数id,如果还没有对这个函数名调用addFunction()或addFunctions(),那么会抛出SQLException。

4.7.1.3.?类org.UXDB.fastpath.FastpathArg

public class FastpathArg extends Object

java.lang.Object
   |
   +----org.UXDB.fastpath.FastpathArg

每个fastpath调用都需要一个参数列表,其数目和类型取决于被调用的函数。 这个类实现了提供这个功能所需要的方法。

关于如何使用这个方法的例子, 请参考org.UXDB.LargeObject包。

又见:.Fastpath, LargeObjectManager, LargeObject。

构造器

  • public FastpathArg(int value)

    构造一个包含一个整数值的参数。

    参数:bytes - 要保存的数组。

  • public FastpathArg(byte buf[],int off,int len)

    构造一个包含一个数组的一部分的参数。

    参数:buf - 源数组;off - 数组内的偏移量;len - 要包括的数据的长度。

  • public FastpathArg(String s)

    构造一个字符串组成的参数。

4.7.2.?几何数据类型

UXDB有一个往表里存储几何特性的数据类型集。范围包括点,线,和多边形。通过org.UXDB.geometric包在Java里支持这些类型。它包括扩展了org.UXDB.util.UXobject 类的类。参考该类获取如何实现你自己的数据类型的控制器的细节。

4.7.2.1.?Class org.UXDB.geometric.UXbox

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXbox

public class UXbox extends UXobject implements Serializable,Cloneable

这个类在UXDB里表示盒子(box) 数据类型。

  • 变量

    public UXpoint point[]

    这些是盒子的两个对角点。

  • 构造器

    • public UXbox(double x1,double y1,double x2,double y2)

      参数:x1 - 第一个 x 坐标;y1 - 第一个 y 坐标;x2 - 第二个 x 坐标;y2 - 第二个 y 坐标。

    • public UXbox(UXpoint p1,UXpoint p2)

      参数: p1 - 第一个点; p2 - 第二个点。

    • public UXbox(String s) throws SQLException

      参数:s - UXDB语法里的盒子定义。

      异常:如果定义非法会抛出异常SQLException。

    • public UXbox()

      必须构造的方法。

  • 方法

    • public void setValue(String value) throws SQLException

      这个方法设置这个对象的值。它应该被重载,但是仍然被子类调用。

      参数:value - 一个代表对象值的字符串。

      异常:如果此数值对这个类型而言是非法的则会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:obj - 要比较的对象。

      返回值:如果两个盒子相等返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须覆盖这个方法以允许对象被克隆。

      覆盖:类UXobject里的equals。

    • public String getValue()

      返回值:UXDB句法需要的UXbox。

      覆盖:类UXobject里的getValue 。

4.7.2.2.?Class org.UXDB.geometric.UXcircle

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXcircle

public class UXbox extends UXobject implements Serializable,Cloneable

这个类代表 UXDB 的圆数据类型,由一个点和一个半径组成。

  • 变量

    public UXpoint center

    这是圆心。

    double radius

    这是半径。

  • 构造器

    • public UXcircle(double x, double y, double r)

      参数:x - 圆心坐标;y - 圆心坐标;r - 圆半径。

    • public UXcircle(UXpoint c, double r)

      参数:c - 描述圆心的UXpoint;r - 圆半径。

    • public UXcircle(String s) throws SQLException

      参数:s - UXDB里语法定义的圆。

      异常:如果转换失败会抛出异常SQLException。

    • public UXcircle()

      这个构造(方法)被驱动器使用。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - 用UXDB的语法定义的圆。

      异常:如果转换失败会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要对比的对象。

      返回值:如果两个圆相同返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须重载这个方法以便允许对象被克隆。

      覆盖:类UXobject里的clone。

    • public String getValue()

      返回值:UXDB语法里的UXcircle字串。

      覆盖:UXobject里的getValue。

4.7.2.3.?Class org.UXDB.geometric.UXline

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXline

public class UXline extends UXobject implements Serializable,Cloneable

这个类实现由两个点组成的线。目前线还没有在后端实现,但这个类保证在后端实现后即可使用。

  • 变量

    public UXpoint point[]

    这是两个点。

  • 构造器

    • public UXline(double x1,double y1,double x2,double y2)

      参数:x1 - 第一个点的x坐标;y1 - 第一个点的y坐标;x2 - 第二个点的x坐标;y2 - 第二个点的y坐标。

    • public UXline(UXpoint p1, UXpoint p2)

      参数:p1 - 第一个点;p2 - 第二个点。

    • public UXline(String s) throws SQLException

      参数:s - UXDB语法定义的点。

      异常:当发生转换错误会抛出异常SQLException。

    • public UXline()

      驱动需要。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - UXDB里语法的线段的定义。

      异常:如果转换失败会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要对比的对象。

      返回值:如果两个圆相同返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须重载这个方法以便允许对象被克隆 (cloned)。

      覆盖:类UXobject里的clone。

    • public String getValue()

      返回值:UXDB语法里的UXcircle字串。

      覆盖:UXobject里的getValue。

4.7.2.4.?Class org.UXDB.geometric.UXlseg

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXlseg

public class UXlseg extends UXobject implements Serializable,Cloneable

这样实现了一条包含两个点的线段。

  • 变量

    public UXpoint point[]

    这是两个点。

  • 构造器

    • public UXlseg(double x1,double y1,double x2,double y2)

      参数:x1 - 第一个点的x坐标;y1 - 第一个点的y坐标;x2 - 第二个点的x坐标;y2 - 第二个点的y坐标。

    • public UXlseg(UXpoint p1, UXpoint p2)

      参数:p1 - 第一个点;p2 - 第二个点。

    • public UXlseg(String s) throws SQLException

      参数:s - UXDB里语法对线段定义的字串。

      异常:当发生转换错误会抛出异常SQLException。

    • public UXlseg()

      驱动需要。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - UXDB里语法对线段定义的字串。

      异常:在发生转换错误时会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要比较的对象。

      返回值:如果两条线段相等true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须覆盖这个方法以便允许这个对象被克隆。

      覆盖:类UXobject里的clone。

    • public String getValue()

      返回值:UXDB语法里的UXlseg字串。

      覆盖:UXobject里的getValue。

4.7.2.5.?Class org.UXDB.geometric.UXpath

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXpath

public class UXpath extends UXobject implements Serializable,Cloneable

这是路径(可以为封闭的多线段图形)的实现。

  • 变量

    public boolean open

    如果路径开放时为true,封闭时为false。

    public UXpoint points[]

    定义路径的点。

  • 构造器

    • public UXpath(UXpoint points[],boolean open)

      参数:points - 定义路径的UXpoints;open - 如果路径是开放的为true,封闭为false。

    • public UXpath()

      驱动需要。

    • public UXpath(String s) throws SQLException

      参数:s - UXDB的语法定义的路径。

      异常:当发生转换错误会抛出异常SQLException。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - UXDB的语法定义的路径的字串。

      异常:在发生转换错误时会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要比较的对象。

      返回值:如果两个路径相同返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须覆盖这个方法以便允许这个对象被克隆。

      覆盖:类UXobject里的clone。

    • public String getValue()

      覆盖:UXobject里的getValue。

    • public boolean isOpen()

      返回值:如果路径是开放的这个方法返回true。

    • public boolean isClosed()

      返回值:如果路径是封闭的这个方法返回true。

    • public void closePath()

      标记路径为封闭。

    • public void openPath()

      标记路径为开放。

4.7.2.6.?Class org.UXDB.geometric.UXpoint

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXpoint

public class UXpoint extends UXobject implements Serializable,Cloneable

这个类实现了java.awt.Point的一个版本,但用double表示参数。

它对应于UXDB里的point数据类型。

  • 变量

    public double x

    点的X坐标。

    public double y

    点的Y坐标。

  • 构造器

    • public UXpoint(double x, double y)

      参数:x - 坐标;y - 坐标。

    • public UXpoint(String value) throws SQLException

      这个方法主要从其他几何类型调用 -- 当一个点嵌入它们的定义中时。

      参数:value - UXDB语法定义的点。

    • public UXpoint()

      驱动需要。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - UXDB语法定义的点。

      异常:在转换失败时会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要比较的对象。

      返回值:如果两个对象相同返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须覆盖这个方法以便允许这个对象被克隆。

      覆盖:类UXobject里的clone。

    • public String getValue()

      返回值:UXDB里语法UXpoint的表示。

      覆盖:UXobject里的getValue。

    • public void translate(int x,int y)

      对点做指定数量的转换(位移)。

      参数:x - 向x轴增加的整型数量;y - 向y轴增加的整型数量。

    • public void translate(double x,double y)

      对点做指定数量的转换(位移)。

      参数:x - 向x轴增加的双精度型数量;y - 向y轴增加的双精度型数量。

    • public void move(int x, int y)

      把点移到指定坐标。

      参数:x - 整数坐标;y - 整数坐标。

    • public void move(double x, double y)

      把点移到指定坐标。

      参数:x - 双精度坐标;y - 双精度坐标。

    • public void setLocation(int x, int y)

      把点移到指定坐标。参考java.awt.Point获取这个方法的描述信息。

      参数:x - 整数坐标;y - 整数坐标。

    • public void setLocation(Point p)

      把点移到指定坐标。参考java.awt.Point获取这个方法的描述信息。

      参数:p - 移动的目的点(Point)。

4.7.2.7.?Class org.UXDB.geometric.UXpolygon

java.lang.Object
   |
   +----org.UXDB.util.UXobject
           |
           +----org.UXDB.geometric.UXpolygon

public class UXpolygon extends UXobject implements Serializable,Cloneable

这个类在UXDB里实现了polygon (多边形)数据类型。

  • 变量

    public UXpoint points[]

    定义polygon(多边形)的点。

  • 构造器

    • public UXpolygon(UXpoint points[])

      使用一个UXpoints数组创建一个多边形。

      参数:points - 定义多边形polygon的点。

    • public UXpolygon(String s) throws SQLException

      参数:s - 用UXDB语法定义的多边形。

      异常:在转换失败时会抛出异常SQLException。

    • public UXpolygon()

      驱动需要。

  • 方法

    • public void setValue(String s) throws SQLException

      参数:s - 用UXDB语法定义的多边形。

      异常:在转换失败时会抛出异常SQLException。

      覆盖:类UXobject里的setValue。

    • public boolean equals(Object obj)

      参数:ojb - 要比较的对象。

      返回值:如果两个对象相同返回true。

      覆盖:类UXobject里的equals。

    • public Object clone()

      必须覆盖这个方法以便允许这个对象被克隆。

      覆盖:类UXobject里的clone。

    • public String getValue()

      返回值:UXDB里语法表示的UXpolygon。

      覆盖:UXobject里的getValue。

4.7.3.?大对象

标准的JDBC规范里也支持大对象。 但是,那个接口有一些限制, 而UXDB提供的API允许对对象内容的随机访问, 就象那是一个本地文件一样。

org.UXDB.largeobject包为Java 提供了libpq C接口的大对象API。它包含两个类:LargeObjectManager处理创建,打开和删除大对象的任务;LargeObject处理独立的对象。

4.7.3.1.?类org.UXDB.largeobject.LargeObject

public class LargeObject extends Object

java.lang.Object
   |
   +----org.UXDB.largeobject.LargeObject

这个类实现UXDB的大对象接口。

它提供运行接口的基本的方法,另外还有一对方法为此对象提供 InputStream 和 OutputStream类。

通常,客户端代码将使用在BLOB里的方法访问大对象。但是,有时候需要低层次的大对象访问方法,那是JDBC规范还不支持的。

参考org.UXDB.largeobject.LargeObjectManager获取如何访问大对象和如何创建大对象的信息。

  • 变量

    public static final int SEEK_SET

    标识从一个文件的开头进行一次搜索。

    public static final int SEEK_CUR

    标识从当前位置进行一次搜索。

    public static final int SEEK_END

    标识从一个文件的结尾进行一次搜索。

  • 方法

    • public int getOID()

      返回这个LargeObject的OID。

    • public void close() throws SQLException

      这个方法关闭对象,在调用这个方法后不能调用这个对象里的任何方法。

    • public byte[] read(int len) throws SQLException

      从对象读取一些数据, 并且做为byte[]数组返回。

    • public int read(byte buf[],int off,int len) throws SQLException

      从对象读取一些数据到现有数组。

      参数:buf - 目的数组;off - 数组内偏移量;len - 读取的字节数。

    • public void write(byte buf[]) throws SQLException

      向对象里写入一个数组。

    • public int write(byte buf[],int off,int len) throws SQLException

      从数组里写一些数据到对象。

      参数:buf - 目标数组;off - 数组内偏移量;len - 写入字节数。

4.7.3.2.?类org.UXDB.largeobject.LargeObjectManager

public class LargeObjectManager extends Object

java.lang.Object
   |
   +----org.UXDB.largeobject.LargeObjectManager

这个类型实现了UXDB的大对象接口。它提供了允许客户代码从数据库里创建,打开和删除大对象的方法。在打开一个对象时,返回一个UXDB.largeobject.LargeObject的实例, 然后它的方法就可以访问该对象。

这个类只能由 org.UXDB.UXConnection 创建 要访问这个类,使用下面的代码片段:

import org.UXDB.largeobject.*;
Connection  conn;
LargeObjectManager lobj;
// ... 打开一个连接的代码 ...
lobj = ((org.UXDB.UXConnection)myconn).getLargeObjectAPI();

通常, 客户代码要使用BLOB方法访问大对象。 但是,有时候需要低层次的大对象访问方法,那是JDBC规范还不支持的。

请参考org.UXDB.largeobject.LargeObject获取如何控制大对象内容的信息。

  • 变量

    public static final int WRITE

    这个模式表明要写入大对象。

    public static final int READ

    这个模式表明要读取大对象。

    public static final int READWRITE

    这个模式是缺省的,表明要对大对象进行读和写的操作。

  • 方法

    • public LargeObject open(int oid) throws SQLException

      这个方法打开一个现有的大对象, 以其OID为基础. 这个方法假设 澳门游戏平台注册网站需要READ和WRITE访问模式 (缺省模式)。

    • public LargeObject open(int oid,int mode) throws SQLException

      这个方法以其OID为基础打开一个现有的大对象,并且允许设置访问模式。

    • public int create() throws SQLException

      这个方法创建一个大对象, 返回它的OID。 它把新创建的大对象模式设为缺省的READWRITE。

    • public int create(int mode) throws SQLException

      这个方法创建一个大对象,返回它的OID。并设置访问模式。

    • public void delete(int oid) throws SQLException

      这个方法删除一个大对象。

    • public void unlink(int oid) throws SQLException

      这个方法删除一个大对象。这个方法等同于 delete 方法, 并且作为类似使用"unlink"的C API出现。

XML 地图 | Sitemap 地图