2012-02-20 73 views
1

我正在構建一個jcr查詢並從存儲庫接收數據。這裏是我的代碼:jcr查詢構造

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()); 
.... 

但這不能成功執行。它給了我一個錯誤,

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

在JCR-shell時,如果我在query sql "select * from public:hours"類型,而且給我正確的結果有效。
我搜索了很多參考文獻,但幾乎每個例子都與我的相同。所以我不確定問題出在哪裏。 任何人都有這方面的經驗,請幫助。

回答

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());'它給了我一個'查詢語句是'的結果,沒有任何結果。所以我想知道我仍然沒有正確構建查詢?謝謝 – 2012-02-21 02:19:05