2013-05-14 71 views
0

的可變輸入數據從數據庫獲取記錄我有一個帶有8個字段的表單,並基於輸入的值,我必須從DataBase中獲取記錄。現在問題出在8個字段中,用戶可以填寫任意數量的字段,並且例如用戶可以填寫字段1,4和6,或者他可以填寫1和7,或者他可以填寫所有字段(當然他必須填寫至少一個字段)...現在,我將如何編寫一個查詢來處理任何數量和順序的輸入參數?也因爲這個查詢將用於報告(iReport)我不允許使用它編寫任何代碼,它必須是SQL查詢。任何想法基於來自

謝謝

+0

你的意思是有8個字段,用戶可以獲取一些字段或所有字段?你也嘗試過什麼嗎? – Azad

+0

我正在開發一個Web應用程序。我有一個包含8個字段的表單,onClicking搜索按鈕,應用程序應該根據上述標準從數據庫獲取記錄 – lakshman

+0

你能看到這個鏈接http://stackoverflow.com/questions/4138864/ireport-using-variables – Azad

回答

0

有很多方法可以做到這一點。我有一篇關於在Microsoft SQL(T-SQL)存儲過程中使用類似於http://code.scottshipp.com/2013/03/29/tutorial-stored-procedures-with-truly-optional-parameters/的方式執行此類操作的博客文章,但很可能您希望執行更復雜的操作並且/或者您未使用MS SQL Server。您可能必須自己編寫查詢片段。我的建議是做如下操作:

  1. 表單提交後,循環遍歷表單中的各個字段,並檢查它們的值是否爲空。
  2. 對於那些不是空的,將一個包含適當的相應查詢片段的字符串添加到某些集合對象,如ArrayList。不要在此字符串中直接包含「AND」或「OR」。如果您需要跟蹤此查詢片段是否與其他查詢片段進行「AND」或「OR」編輯,請在單獨的集合對象中進行跟蹤。我所說的「查詢片段」將顯示在你的SQL查詢的「where __」部分。例如,說搜索是爲了某人的姓。您添加的查詢片段是一個字符串,其中顯示「lastName ='」+ lastNameField.value()+「'」。
  3. 一旦您遍歷了表單中的所有不同字段並使最終集合對象充滿了查詢片段,就可以從中構建最終的SQL語句。迭代你的集合對象(本例中是ArrayList),並用適當的「AND」或「OR」連接每個對象。假設你的ArrayList有三個片段「firstName ='Joe'」,「middleName ='Q。'」,「lastName ='Public'」。使用StringBuilder不斷將這些片段添加到最終的where子句中:「firstName ='Joe'AND middleName ='Q。' AND lastName ='Public'「...您可能想要將這些更改爲帶有通配符的」LIKE「樣式查詢。
  4. 您現在擁有了創建最終選擇語句所需的一切。發佈到數據庫並檢索結果!
+0

非常感謝Scott ...... :) – lakshman