2011-12-10 13 views
0

私は、ソートの選択とソートの選択を可能にするソートのSQL構文を使用してJavaライブラリを作成するつもりだったプロジェクトのアイディアを持っていました。私は本当にのあまり考えていないJava SQLスタイルの配列操作

{ 3, 4, 5, 6, 7 } 

int[] nums = new int[] { 0, 5, 7, 2, 4, 9, 3, 1, 6, 8 } 

int result = select().from(nums).where("value > 2").and("value < 8").sort("ASC"); 

は、これは、このような新しい配列を返します:

私の考えでは、このような配列から選択することができることでしたこれを行う理由や理由がありますが、それは非常に興味深い試みになると思います。

私の質問は、このようなことは何ですか?それとも私はこれについて何か特別な方法がありますか?

select().from(array).where("Field1 = "+someValue).or("Field1 = "+anotherValue); 

と可能性が上に行く:

また、私は、これはObjectあなたはこのように、複数のフィールドを選択することができ配列、のために有用である可能性を考えていました。しかし、私はこれらのメソッドの実装を開始する方法をどこから開始するのか、それともどうすればよいのかが分かりません。

これは、回答のある質問よりも「行く場所」のほうが多いので、どんなヘルプも役立ちます。

答えて

1

これは興味深いプロジェクトだと思います。

これにはさまざまなアプローチがあります。 1つは、Queryオブジェクトを作成することです。これは、メソッドを順番に呼び出して構築します。

したがって、このような何か:

public class Query { 

    public static Query select(String...fields){ 
    //code omitted 
    return query; 
    } 

    public Query from(Collection<Object> collection){ 
    //code omitted 
    return this; 
    } 

    public Query where(String field, Object value){ 
    //code omitted 
    return this; 
    } 

} 

だから、あなたが行うことができます:

Query.select("field1", "field2").from(myList).... 

あなたは値が各ポイントで、彼らの次の状態かどうかを選択されていたのを追跡する必要があるだろう(orの場合のように)それらに追加するか、またはそれらから削除する必要があります(andの場合のように)。多くのエッジケースがあります。私の助言は、intsの例のように非常に単純なものから始め、そこから作業することです。

オブジェクトバージョンを実行するときには、reflectionを使用してオブジェクトのフィールドにアクセスする必要があります。

コードの型の安全性を向上させることを検討したい場合は、genericsを使用します。

まったく興味深いプロジェクトの範囲がたくさんあります。しかし、エッジのケースがたくさんあるので、デザインを通して公正なビットを考えて考える価値があり、公正なビットを行うことは悪い考えではないと感じています。unit testing.

+0

すばらしい説明!私はリフレクションを使用することを考えていましたが、関数のセットを作るのではなく、 'Query'のようなクラスを使う考えが好きです。 – Jon

3

あなたが探しているものは、C#のLINQに似ています。

あなたは先発

LINQ for Java tool

What is the Java equivalent for LINQ?

ます。また、C#で使用可能なラムダ式を見てすることがありますため、これらのリンクを参照することができます。他に何を提案するか分からない。

しかし、あなたはJavaでLINQに似た何かを構築しようとしているなら、それはちょっと複雑です。その場合、その答えはかなり長い(または大きなエラーです)

+0

私はさらに多くを見ています何かを構築する。私ができることを参照するために、このような既存のものを見たいと思っていました。ありがとう。 – Jon

1

LINQ for Javaのようなものですか?

まあ、jxpathがあります。これは、あなたが探しているもののような、JavaコレクションでXPathスタイルのクエリを実行できるようにします。

jOOQライブラリには、説明したものと似たクエリがありますが、実際のデータベースで使用するためのものです。