2015-03-31 40 views
0

在我問我的問題之前,我澄清說我知道xe:sqlParameter選項。XPages和xe:jdbcQuery - 動態查詢

問題:我該如何實現根據用戶在頁面上輸入動態準備查詢的可能性?

示例場景:帶有數據的SQL表「datatable1」也具有「類型」和「顏色」列。我通過使用以下代碼顯示錶中的所有內容:

<xp:this.data> 
    <xe:jdbcQuery var="dataDS" connectionName="dataConnection"> 
     <xe:this.sqlQuery><![CDATA[SELECT * FROM datatable1]]></xe:this.sqlQuery> 
    </xe:jdbcQuery> 
</xp:this.data> 

數據表內容本身由xe:dataView顯示。

因此,基本的問題,是有可能與單一數據源XE覆蓋:下面jdbcQuery和單頁中列出的所有情況:

案例1:最終用戶看到的所有記錄(這是由代碼覆蓋以上);

情況2:最終用戶希望看到的所有記錄,其中顏色= 「紅色」

對於這種情況下,我會使用查詢:「SELECT * FROM datatable1 WHERE color =?「並通過xe:sqlParameter傳遞參數值。但是這樣可以查看所有記錄,因爲我無法通過意義上的「任何」來傳遞價值。或者可能嗎?

情況3:最終用戶希望看到的所有記錄其中type = 「汽車」

非常類似於情形2

情況4:最終用戶希望看到的所有記錄,其中顏色=「紅」和類型=「汽車」

對於這種情況,我會使用查詢:「SELECT * FROM datatable1 WHERE color =? ?和type =」以及通過XE parametrs傳值:SqlParameter的

在這一刻我沒有看到解決我的問題......當然,我可以做的SQL數據庫查詢動態的ManagedBean,但隨後我丟失了xe:dataView的排序和演示功能,並且必須手動執行它,比如說通過重複或xp:dataTable,我想避免什麼...

感謝您的職位!

回答

1

使用Like運算符並將%替換爲希望所有內容匹配的情況,必須使用數據源中的SQL參數計算該值以返回所需的值,或者如果e mpty/null返回%。

SELECT * FROM datatable1 WHERE color like LIKE?和類型LIKE?

+0

感謝您的想法,但我無法得到它的正常工作......所以,如果我想有準備語句,要顯示所有記錄,結果(計算)公式應該是[SELECT * FROM datatable1 WHERE color LIKE%AND type LIKE%]?如果我錯了,你能糾正我嗎?僅供參考:我正在使用PostgreSQL。 – 2015-04-01 19:37:39

+0

你需要一個圍繞%的單引號,如SELECT * FROM Customers WHERE Country LIKE'%'和ContactName LIKE'%'; – Howard 2015-04-02 13:37:43

+0

請參閱http://www.w3schools.com/sql/sql_like.asp並嘗試使用Try It Yourself按鈕,然後您可以添加自己的sql進行實驗。 – Howard 2015-04-02 13:39:06

1

我們開發了一個搜索郵政地址的應用程序。最終用戶輸入一些信息,如街道名稱和城市,或輸入一個郵政編碼,然後根據輸入的信息構建一個SQL字符串。然後,將該SQL查詢放入視圖使用的會話範圍變量中以獲取它顯示的數據。會話範圍SQL查詢已初始化爲「Select * from our_table」。這裏的關鍵是使用綁定到會話作用域變量的JDBC Query數據源的視圖。

這裏是XP的數據部分:viewPanel中

<xp:this.data> 
    <xe:jdbcQuery var="view1" connectionName="oracle" calculateCount="true" sqlQuery="#{javascript:sessionScope.SQLQuery;}"></xe:jdbcQuery> 
</xp:this.data> 
+0

是的,我也注意到xe:jdbcQuery中的sqlQuery只在頁面加載時計算一次。所以sessionScope離開了作爲最後一種情況的解決方法......顯然,目前 - 只有一種可能的方式來按照我需要的方式實現它。已經做到了可行性 - 工作正常。完成後會發布我的代碼。 – 2015-04-01 19:50:21