2012-02-20 7 views
1

私はjcrクエリを構築しており、リポジトリからデータを受け取ります。ここに私のコードです:jcr query construct

String queryString = "SELECT * FROM public:hours"; 

try { 
    // get session 
    Session session = requestContext.getSession(); 

    // create query from queryString constructed 
    Query q = session.getWorkspace().getQueryManager().createQuery(queryString, Query.JCR_SQL2); 

    // execute query and retrieve result 
    QueryResult result = q.execute(); 


    // debug line 
    log.error("query is", q.getStatement()); 
.... 

しかし、これは正常に実行することはできません。それは私がquery sql "select * from public:hours"を入力し、私に適切な結果を与える場合JCR-シェルで

Repositorty Failed: 
[INFO] [talledLocalContainer] javax.jcr.query.InvalidQueryException: Query: 
[INFO] [talledLocalContainer] SELECT * FROM public:(*)hours; expected: <end> 

は、それが動作することを私にエラーを与えます。
多くの参考文献を検索しましたが、ほぼすべての例が私のものと同じです。だから私は問題がどこにあるか分からない。 誰でもこれを手伝ってください。

答えて

4

あなたはJCR-SQL2のクエリ言語を使用している場合、あなたは角括弧でセレクタ名を引用符で囲む必要があります。詳細については

SELECT * FROM [public:hours] 

JSR-283(別名、JCR 2.0のセクション6.7.4を参照してください)仕様は、onlineでも利用できます。名前が有効なSQL92識別子である場合は、角カッコの引用符文字は不要です。 ':'文字はSQL92識別子では使用できないため、名前空間接頭辞を含むノード型名は常に引用符で囲む必要があります。

もちろん、これは "public:hours"という名前のノードタイプがあることを前提としています。ここで、 "public"は名前空間接頭辞です。

+0

こんにちは@Randallあなたの答えをありがとう! (注:私は 'query sql 'を使ってシェルから結果を得ることができますselect * from public:hours" ')
私のコードの最後の行は' log.error( "query is"、q.getStatement()); 'それは私に' query statement is'の結果を与えます。だから私はまだクエリを正しく構築していないのだろうかと思っていますか?ありがとうございました –

関連する問題