私は、ユーザーの検索条件に従ってデータベースからレコードを取得するWebアプリケーションを設計しています。結果を取得した後、フロー内に別のステージが存在し、結果が追加のデータで「装飾」されます。デザイン:データベースとJavaの両方で同じ論理計算が必要
たとえば、名前、年齢、身長、体重などの列を持つ人物データベーステーブルがあるとします。プログラムは、そのテーブルを特定の論理計算式でフィルタリングすることができる。人の体重のように定義された彼女の「理想体重」、未満のすべての人のレコードを保つ:だから
IDEAL_WEIGHT = (height/100) * age
、我々はIDEAL_WEIGHT <重量すべてのレコードが表示されますが、これはSQL、ストアドプロシージャなどを用いて達成することができます - 最終行はです。これはSQLでフィルタリングしています。 「結果の装飾」段階に関して、それは、例えば、各結果に対してWEIGHT_PER_INCHを算出
WEIGHT_PER_INCH = height/weight
として定義されるこれらの「装飾」の計算は、上記よりも多く複雑で、実際に広範であることができることができますリモートホスト上に存在するデータを含むか、または他の計算ユニットに依存する可能性があります。だから、SQLと思われ、おそらくPL/SQLは仕事には適していません。Javaのほうがです。はJavaでで「装飾」しています。
ここでは、IDEAL_WEIGHTによるフィルタリングとWEIGHT_PER_INCHでの装飾を行っていますが、とは逆の方法が必要な場合はどうなりますか?(つまり、WEIGHT_PER_INCHでフィルタリングし、IDEAL_WEIGHTで装飾する)。
これらの計算ユニットはすべて、ストアドSQLプロシージャーまたはJavaクラスのいずれかのタイプである必要があります。しかし、それらがSQLプロシージャーであれば、表現力が十分ではなく、Javaクラスであれば、データベースをすばやく検索するために使用することはできません。
私の質問は:
SQL、例えばからJavaを呼び出すためのきれいな、広く使用されている、高速な方法があります
Select * from Persons p where IDEAL_WEIGHT(p) < p.weight
ここで、IDEAL_WEIGHT()はJavaメソッドであり、SQLプロシージャではありません。
または:これ以外の方法はありますか?
ありがとうございました。
あなたは特定のDB製品を念頭に置いていますか? –
実際にMySqlを使用していません... – bloodcell
"広く使用されているクリーンな方法で、JavaからSQLを呼び出す方法はありますか?"その答えは "ストアドプロシージャ"です。多くのデータベース(DB2やOracleを含む)では、ストアドプロシージャをjavaで記述することができます。どのデータベースを使用していますか? **編集**:ああ、mysql。私はそれが何をサポートしているかわかりませんが、基準が "無料のデータベース"の場合、PostgreSQLは[PL/Java](http://pljava.projects.postgresql.org/)から入手できるJavaストアドプロシージャを持っています。 – jmelesky