Torque は Jakarta Turbine の一部として開発されていましたが、 最近は Apache DB Project のサブプロジェクトの一つとなりました。
Apache DB Project のサブプロジェクトですから、もちろん、 データベースとのやりとりをするための API です。 これだけではなく、SQL を内部で作成するために、データベースが Oracle であろうが、 PostgreSQL であろうが、IBM DB2 であろうが、MySQL であろうが、 プログラムを一切変更せず対応できてしまうのです。 また、テーブル一つに対し、Java のソースが一つ生成され、データベースへのアクセスを気にしないで コーディングすることができます。
このページは更新されません。 私は既に Torque を使っておらず、使う機会もしばらくはないためです。 そして最近、Torque に関する日本語の情報も得られるようになってきました。 そのため、書く気がなくなったというのが一番大きな理由でしょうか。 Torque のことをもっと知りたければ、下の リンク から辿れる ページを御覧下さい。
いきなり FAQ です。Torque の使い方なんて http://db.apache.org/torque/ を見て、設定ファイル書いて、ant を実行すればできるのですから、 私がうだうだ説明するよりも他にも説明してくれているサイトを見れば良いと思います。
まぁ、そのうち使い方も書くかもしれませんが。
はい。私もこの問題にはまりました。 ソートした結果から 10 件目から 20 件目までを取り出したいという時、 私が確認できている限り、Oracle では取り出したい結果が取り出せません。 それは Oracle が LIMIT をサポートしているため、順番として、LIMIT した結果で ORDER BY をかけているようなのです。 (ちょっと使ってから日が立っているため正確ではないかもしれない) ではどうするか。私は次の方法で解決しました。
org.apache.torque.adapter.DBOracle というクラスの中に
supportNativeLimit と getLimitStyle という
二つのメソッドがあります。
この帰り値を false と DB.LIMIT_STYLE_NONE に変更します。
こうすることで、LIMIT により取得する件数を制限していたのが
ResultSet をぐるぐる回すことで制限するようになります。
Torque では SELECT の条件に Criteria というクラスを使います。
しかし、この Criteria だけでは SELECT の条件に不十分な時があります。
それは一つのカラムに複数の条件が必要な場合です。
例えば SOME_DATA という NUMBER 型のカラムを取り出す時に
SOME_DATA の値が 10 以上かつ 20 以下の値を抽出したい場合を考えます。
SQL としては以下のような文を期待しています。
SELECT * FROM SOME_TABLE WHERE SOME_DATA >= 10 AND SOME_DATA <= 20
これを Criteria でやろうとした場合、
単純に考えると以下のようになります。
Criteria criteria = new Criteria("SOME_TABLE");
criteria.add("SOME_DATA", 10, Criteria.GREATER_EQUALS);
criteria.add("SOME_DATA", 20, Criteria.LESS_EQUALS);
しかし、上のようなコードでは思い通りにデータは抽出されません。
Criteria では、一つのカラムには一つの条件しか指定することはできません。
もし、一つのカラムに対して、Criteria で複数の条件を指定すると
一番最後の条件しか指定されなかったこととなります。
そんな時の解決策として、Criteria の内部クラスである
Criteria.Criterion があります。
これを使うと一つのカラムに対して複数の条件を指定することができます。
だから、先ほどの例をきちんと動作するように書くと以下のようなコードとなります。
Criteria criteria = new Criteria("SOME_TABLE");
criteria.add("SOME_DATA", 10, Criteria.GREATER_EQUALS);
Criteria.Criterion criterion = criteria.getNewCriterion(
"SOME_DATA",
new Integer(10), Criteria.LESS_EQUALS
);
criteria.and(criterion);
これで一つのカラムに対する複数の条件が指定できるようになります。
| コンテンツ |
|---|
| リンク |