PostgreSQL は拡張可能なデータベースシステムです。問い合わせから呼び出すことができる、独自の関数をバックエンドに追加することができます。独自の型さえも追加することができます。こういった PostgreSQL 独特な機構がありますので、Java でもこれを API の拡張セットを用意してサポートします。実際、標準ドライバの中核でも、ラージオブジェクトなどの実装のためにこの拡張を使用しています。
いくつかの拡張機能にアクセスするには、org.postgresql.PGConnection クラスの追加メソッドのいくつかを使用しなければいけません。この場合、Driver.getConnection() からの戻り値をキャストしなければいけません。たとえば、以下のようにします。
Connection db = Driver.getConnection(url, username, password); // ... // 後で Fastpath fp = ((org.postgresql.PGConnection)db).getFastpathAPI();
public class PGConnection
ここには、PostgreSQL の拡張にアクセスするために使用される追加メソッドがあります。
public Fastpath getFastpathAPI() throws SQLException
現在の接続用のファーストパス API を返します。主にラージオブジェクト API で使用されます。
この関数を使用する最善の方法は次のようなものです。
import org.postgresql.fastpath.*; ... Fastpath fp = ((org.postgresql.PGConnection)myconn).getFastpathAPI();
ここで、myconn は開いている PostgreSQL への Connection オブジェクトです。
戻り値: PostgreSQL サーバにある関数へのアクセスを可能にする Fastpath オブジェクト。
例外: SQLException がFastpath の初回の初期化時にスローされる可能性があります。
public LargeObjectManager getLargeObjectAPI() throws SQLException
現在の接続用のラージオブジェクト API を返します。
この関数を使用する最善の方法は次のようなものです。
import org.postgresql.largeobject.*; ... LargeObjectManager lo = ((org.postgresql.PGConnection)myconn).getLargeObjectAPI();
ここで、myconn は開いている PostgreSQL への Connection オブジェクトです。
戻り値: API を実装した LargeObject オブジェクト。
例外: SQLException が LargeObject の初回の初期化時にスローされる可能性があります。
public void addDataType(String type, String name)
これによってクライアントのコードが、多くの PostgreSQL 独特のデータ型のためのハンドラを追加することができます。通常、ドライバで認識されないデータ型は、PGobject のインスタンスとして ResultSet.getObject() から返されます。このメソッドを使って、PGobject を拡張したクラスを書くことや、ドライバに型名と使用するクラス名を通知することができます。欠点は、接続を確立するたびにこのメソッドを呼び出さなければならないことです。
この関数を使用する最善の方法は次のようなものです。
... ((org.postgresql.PGConnection)myconn).addDataType("mytype","my.class.name"); ...
ここで、myconn は開いている PostgreSQL への Connection オブジェクトです。取り扱うクラスは org.postgresql.util.PGobject を継承する必要があります。
public class Fastpath extends Object java.lang.Object | +----org.postgresql.fastpath.Fastpath
Fastpath は libpq C インタフェース内に存在する API で、これによってクライアントマシンはデータベースサーバにある関数を実行することができます。ほとんどのクライアントコードでは、このメソッドを使用する必要がありません。しかし、ラージオブジェクト API で使用するために用意されています。
使用するためには、次のようにして org.postgresql.fastpath パッケージをインポートしなければいけません。
import org.postgresql.fastpath.*;
そして、FastPathオブジェクトを入手したい時に次のコードを書きます。
Fastpath fp = ((org.postgresql.PGConnection)conn).getFastpathAPI();
これはデータベース接続に関連付けられた、コマンドを発行する際に使用するインスタンスを返します。getFastpathAPI() は JDBC には無い拡張メソッドですので、Connection オブジェクト を org.postgresql.PGConnection オブジェクトにキャストする必要があります。Fastpath インスタンスを所有すれば、fastpath() メソッドを使用してサーバ関数を実行することができます。
関連項目: Fastpath, FastpathArg, LargeObject
public Object fastpath(int fnid, boolean resulttype, FastpathArg args[]) throws SQLException
PostgreSQL サーバへ関数呼び出しを送信します。
パラメータ: fnid - 関数ID resulttype - 結果が整数の場合真、他の結果の場合は偽 args - ファースト呼び出しに渡す FastpathArguments
戻り値: データがない場合、null。 結果が整数の場合は、整数、さもなくば、byte[]。
public Object fastpath(String name, boolean resulttype, FastpathArg args[]) throws SQLException
PostgreSQLサーバへ関数呼び出しを名前により送信します。
注意: 通常は事前に addfunction()を呼び出して、プロシージャ名を関数 ID に割り当てておく必要があります。関数 ID はサーバのバージョンによって異なりますので、このメソッドの呼び出しは推奨されています。 このメソッドの使用例については org.postgresql.LargeObject を参照してください。
パラメータ: name - 関数名 resulttype - 結果が整数の場合は真、他の結果の場合は偽 args - ファーストパス呼び出しに渡すFastpathArguments
戻り値: データがない場合、null。 結果が整数の場合は、整数、さもなくば、byte[]。
関連項目: LargeObject
public int getInteger(String name, FastpathArg args[]) throws SQLException
この簡易メソッドは結果の値が整数であることを仮定しています。
パラメータ: name - 関数名 args - 関数への引数
戻り値: 整数の結果
例外: データベースアクセスエラーが発生した場合や結果がない場合、SQLException。
public byte[] getData(String name, FastpathArg args[]) throws SQLException
この簡易メソッドは結果の値がバイナリデータであると仮定しています。
パラメータ: name - 関数名 args - 関数への引数
戻り値: 結果を構成する byte[] 配列
例外: データベースアクセスエラーが発生した場合や結果がない場合、SQLException
public void addFunction(String name, int fnid)
これは関数を検索テーブルに追加します。ユーザコードでは addFunctions メソッドを使用するべきです。このメソッドは OID を直接記述するのではなく、問い合わせに基づいています。関数の OID が変動せずに維持されることは保証されていませんし、同一のバージョンのサーバ間でさえも異なります。
public void addFunctions(ResultSet rs) throws SQLException
このメソッドは 2 つの列を持つ ResultSet を引数として取ります。列 1 には関数名、列 2 にはその OID が入ります。ResultSet 全体を読み取り、その値を関数テーブル中に読み込みます。
重要項目: このメソッドを呼び出した後に ResultSet を close() することを忘れないでください。
関数名の検索に関する実装時の注意書き: PostgreSQL は関数 ID と ID に対応する名前を pg_proc テーブルに保存します。ローカルで処理速度を上げるために、要求に応じてこのテーブルに関数を問い合わせるのではなく Hashtable が使用されています。また、できる限り高速な接続時間を維持するために、関数の必須項目のみがこのテーブルに登録されています。
org.postgresql.LargeObject クラスは、その起動時に問い合わせを行い、この段階で返された ResultSet を addFunctions() メソッドに渡します。これを行った後、ラージオブジェクト API はその関数を名前で参照します。
手作業による OID への変換ができるとは考えないでください。現時点では手作業でも問題ありませんが、開発を通して変更されます(V7.0 でもこの問題について議論が何回かありました)。ですから、これは将来において保証されない不具合を防ぐために実装されています。
関連項目: LargeObjectManager
public int getID(String name) throws SQLException
このメソッドは名前に関連付けられた関数 ID を返します。指定した名前に対してaddFunction() または addFunctions() が呼び出されていなければ、SQLException が生成されます。
public class FastpathArg extends Object java.lang.Object | +----org.postgresql.fastpath.FastpathArg
各ファーストパス呼び出しは引数の配列、引数の数、呼び出される関数に依存する型を必要とします。このクラスはこの能力を提供するのに必要なメソッドを実装します。
このクラスの使用例については、org.postgresql.LargeObject パッケージを参照してください。
関連項目: Fastpath, LargeObjectManager, LargeObject
public FastpathArg(int value)
整数値の引数で構築します。
パラメータ: value - 設定する整数値
public FastpathArg(byte bytes[])
byte 型配列の引数で構築します。
パラメータ: bytes - 保存する配列
public FastpathArg(byte buf[], int off, int len)
byte 型配列の引数の一部分で構築します。
パラメータ:
元となる配列
配列内のオフセット
使用するデータの長さ
public FastpathArg(String s)
String 型の引数で構築します。
PostgreSQL には、幾何的な性質をテーブルに格納することができる、データ型群があります。単一の点、直線、多角形などです。org.postgresql.geometric パッケージにてこれらの型を Java でサポートします。このパッケージは、 org.postgresql.util.PGobject を継承したクラスより構成されています。独自のデータ型ハンドラの実装方法に関する詳細については、このクラスを参照して下さい。
Class org.postgresql.geometric.PGbox java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGbox public class PGbox extends PGobject implements Serializable, Cloneable このクラスは、PostgreSQL の box データ型を表現します。 変数 public PGpoint point[] ボックスの 2 つの頂点があります。 コンストラクタ public PGbox(double x1, double y1, double x2, double y2) パラメータ: x1 - 1 番目の x 座標値 y1 - 1 番目の y 座標値 x2 - 2 番目の x 座標値 y2 - 2 番目の y 座標値 public PGbox(PGpoint p1, PGpoint p2) パラメータ: p1 - 1 番目の点 p2 - 2 番目の点 public PGbox(String s) throws SQLException パラメータ: s - PostgreSQL の構文におけるボックスの定義 例外: SQLException 定義が無効の場合 public PGbox() 必要なコンストラクタ メソッド public void setValue(String value) throws SQLException このメソッドはオブジェクトの値を設定します。これはオーバライドされるべきものですが、依然としてサブクラスから呼び出されます。 パラメータ: value - このオブジェクトの値を表す文字列 例外: SQLException value がこの型に不適切だった場合 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つのボックスが同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL で想定される構文による PGbox オーバライド: クラス PGobject 内の getValue Class org.postgresql.geometric.PGcircle java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGcircle public class PGcircle extends PGobject implements Serializable, Cloneable このクラスは中心と半径から構成される、PostgreSQL の circle データ型を表現します。 変数 public PGpoint center この円の中心点 double radius この円の半径 コンストラクタ public PGcircle(double x, double y, double r) パラメータ: x - 中心座標値 y - 中心座標値 r - 円の半径 public PGcircle(PGpoint c, double r) パラメータ: c - 円の中心を表す PGpoint r - 円の半径 public PGcircle(String s) throws SQLException パラメータ: s - PostgreSQL の構文における円の定義 例外: SQLException 変換失敗時 public PGcircle() このコンストラクタはドライバによって使用されます。 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL の構文における円の定義 例外: SQLException 変換失敗時 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの円が同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL が想定している構文での PGcircle オーバライド: クラス PGobject 内の getValue Class org.postgresql.geometric.PGline java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGline public class PGline extends PGobject implements Serializable, Cloneable このクラスは 2 つの点からなる直線を実装します。 現時点では、サーバにおいてまだ直線は実装されていませんが、このクラスは実装に備えて準備が整っています。 変数 public PGpoint point[] 2 つの点があります。 コンストラクタ public PGline(double x1, double y1, double x2, double y2) パラメータ: x1 - 1 番目の点の座標値 y1 - 1 番目の点の座標値 x2 - 2 番目の点の座標値 y2 - 2 番目の点の座標値 public PGline(PGpoint p1, PGpoint p2) パラメータ: p1 - 1 番目の点 p2 - 2 番目の点 public PGline(String s) throws SQLException パラメータ: s - PostgreSQL の構文における直線の定義 例外: SQLException 変換失敗時 public PGline() ドライバによって必要とされます。 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL 構文における線分の定義 例外: SQLException 変換失敗時 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの直線が同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL で想定される構文の PGline オーバライド: クラス PGobject 内の getValue Class org.postgresql.geometric.PGlseg java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGlseg public class PGlseg extends PGobject implements Serializable, Cloneable このクラスは 2 つの点からなる lseg (線分) を実装します。 変数 public PGpoint point[] 2つの点があります。 コンストラクタ public PGlseg(double x1, double y1, double x2, double y2) パラメータ: x1 - 1 番目の点の座標値 y1 - 1 番目の点の座標値 x2 - 2 番目の点の座標値 y2 - 2 番目の点の座標値 public PGlseg(PGpoint p1, PGpoint p2) パラメータ: p1 - 1 番目の点 p2 - 2 番目の点 public PGlseg(String s) throws SQLException パラメータ: s - PostgreSQL 構文における線分の定義 例外: SQLException 変換失敗時 public PGlseg() ドライバによって必要とされます。 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL 構文における線分の定義 例外: SQLException 変換失敗時 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの線分が同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL で想定される構文の PGlseg オーバライド: クラス PGobject 内の getValue Class org.postgresql.geometric.PGpath java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGpath public class PGpath extends PGobject implements Serializable, Cloneable このクラスは経路 (複数の線分。閉じた場合もあります) を実装します。 変数 public boolean open 開いた経路の場合 true 、閉じた経路の場合 false public PGpoint points[] 経路を定義する点 コンストラクタ public PGpath(PGpoint points[], boolean open) パラメータ: points - 経路を定義する PGpoint open - 開いた経路の場合 true 、閉じた経路の場合 false public PGpath() ドライバによって必要とされます。 public PGpath(String s) throws SQLException パラメータ: s - PostgreSQL 構文における経路の定義 例外: SQLException 変換失敗時 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL 構文における経路の定義 例外: SQLException 変換失敗時 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの経路が同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバーライド: クラス PGobject 内の clone public String getValue() このメソッドは、PostgreSQL で想定される構文における経路を返します。 オーバライド: クラス PGobject 内の getValue public boolean isOpen() 開いた経路の場合 true を返します。 public boolean isClosed() 閉じた経路の場合 true を返します。 public void closePath() 閉じた経路として印をつけます。 public void openPath() 開いた経路として印をつけます。 Class org.postgresql.geometric.PGpoint java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGpoint public class PGpoint extends PGobject implements Serializable, Cloneable このクラスは、座標を double で表した java.awt.Point 版を実装します。ただし、これは座標の表現にdoubleを使用しています。 これは PostgreSQL 内の point データ型に割り当てられます。 変数 public double x 点の X 座標 public double y 点の Y 座標 コンストラクタ public PGpoint(double x, double y) パラメータ: x - 座標値 y - 座標値 public PGpoint(String value) throws SQLException Parameters: value - Definition of this point in PostgreSQL's syntax --> これは主に他の、その定義に点が組み込まれている幾何データ型から呼び出されます。 パラメータ: value - PostgreSQL 構文における点の定義 public PGpoint() ドライバによって必要とされます。 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL 構文における点の定義 例外: SQLException 変換失敗時 オーバライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの点が同一の場合 true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL で想定される構文における PGpoint オーバライド: クラス PGobject 内の 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 - 整数座標値 関連項目: Point public void setLocation(Point p) 与えられた量で点を移動します。 この説明については java.awt.Point を参照して下さい。 パラメータ: p - 移動する点 関連項目: Point Class org.postgresql.geometric.PGpolygon java.lang.Object | +----org.postgresql.util.PGobject | +----org.postgresql.geometric.PGpolygon public class PGpolygon extends PGobject implements Serializable, Cloneable このクラスは、PostgreSQL の polygon データ型を実装します。 変数 public PGpoint points[] 多角形を定義する点。 コンストラクタ public PGpolygon(PGpoint points[]) PGpoints の配列を使用した多角形の作成を行います。 パラメータ: points - 多角形を定義する点。 public PGpolygon(String s) throws SQLException パラメータ: s - PostgreSQL の構文を使用した多角形の定義。 例外: SQLException 変換失敗時 public PGpolygon() ドライバによって必要とされます。 メソッド public void setValue(String s) throws SQLException パラメータ: s - PostgreSQL の構文を使用した多角形の定義。 例外: SQLException 変換失敗時 オーバーライド: クラス PGobject 内の setValue public boolean equals(Object obj) パラメータ: obj - 比較対象オブジェクト 戻り値: 2 つの多角形が同一の場合、true オーバライド: クラス PGobject 内の equals public Object clone() オブジェクトの複製を許可する場合にオーバーライドする必要があります。 オーバライド: クラス PGobject 内の clone public String getValue() 戻り値: PostgreSQL が想定する構文における PGpolygon オーバライド: クラス PGobject 内の getValue
ラージオブジェクトは標準 JDBC 仕様でサポートされていますが、そのインタフェースは制限されています。PostgreSQL で提供される API では、ローカルファイル同様にオブジェクトの内容へのランダムアクセスを行うことができます。
org.postgresql.largeobject パッケージは、Java に libpq C インタフェースのラージオブジェクト API を提供します。このパッケージは、ラージオブジェクトの作成、オープン、削除を扱う LargeObjectManager と個々のオブジェクトを扱う LargeObject という 2 つのクラスから構成されます。
public class LargeObject extends Object java.lang.Object | +----org.postgresql.largeobject.LargeObject
このクラスは PostgreSQL のラージオブジェクトインタフェースを実装します。
インタフェースを実行するために必要な基本的なメソッドと、このオブジェクト用の InputStream および OutputStream クラスを提供する 2 つのメソッドを提供します。
通常、クライアントコードはラージオブジェクトにアクセスするために BLOB のメソッドを使用します。
しかし、ラージオブジェクトに、JDBC 仕様ではサポートされていない、低レベルなアクセスが必要な場合があります。
ラージオブジェクトへのアクセスの入手方法や作成方法については org.postgresql.largeobject.LargeObjectManager を参照して下さい。
関連項目: LargeObjectManager
ファイルの先頭からシークすることを示します。
現在位置からシークすることを示します。
ファイルの終りからシークすることを示します。
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
オブジェクトの一部のデータを既存の配列に読み込みます。
パラメータ:
書き込み元配列
配列内のオフセット
読み込むバイト数
public void write(byte buf[]) throws SQLException
オブジェクトに配列を書き込みます。
public void write(byte buf[], int off, int len) throws SQLException
配列の一部をオブジェクトに書き込みます。
パラメータ:
書き込み元配列
配列内のオフセット
書き込むバイト数
public class LargeObjectManager extends Object java.lang.Object | +----org.postgresql.largeobject.LargeObjectManager
このクラスは PostgreSQL のラージオブジェクトインタフェースを実装します。 クライアントコードによる、ラージオブジェクトの作成、オープン、削除をデータベースに対して実行することができるメソッドを提供します。 オブジェクトを開くと、org.postgresql.largeobject.LargeObject のインスタンスが返され、そのクラスのメソッドを使用してオブジェクトにアクセスすることができます。
このクラスは、org.postgresql.PGConnection によってのみ作成することができます。 このクラスへアクセスするには、以下に示すコードを使用して下さい。
import org.postgresql.largeobject.*; Connection conn; LargeObjectManager lobj; // ... 接続を開くコード lobj = ((org.postgresql.PGConnection)myconn).getLargeObjectAPI();
通常、クライアントコードはラージオブジェクトにアクセスするために BLOB メソッドを使用します。しかし、ラージオブジェクトに、JDBC 仕様ではサポートされていない、低レベルのアクセスが必要な場合があります。
ラージオブジェクトの内容の操作方法については org.postgresql.largeobject.LargeObject を参照して下さい。
オブジェクトに書き込みを行うことを示すモードです。
オブジェクトに読み込みを行うことを示すモードです。
このモードはデフォルトです。ラージオブジェクトの読み込み、書き込みを行うことを示します。
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 メソッドと同じです。C API における "unlink" の使用方法を提供します。